我有一个包含多行的文件 example.txt:
Larry is funny!
Funny, I've no glue!
Look here!
Tom has no pants.
The underpants are in the drawer.
Pants are in the closet!
创建具有 4 个随机行号的文件后
sed -n '=' example.txt | shuf | head -3 > line_numbers.txt
假设 line_numbers.txt 中的行号包含
1
3
6
我想通过在 line_numbers.txt 的每一行附加单词 WORD 来编辑 example.txt,其中包含完整的单词“pants”(不是像“underpants”这样的部分单词)。
我怎样才能做到这一点?
我希望 example.txt 看起来像这样
Larry is funny!
Funny, I've no glue!
Look here!
Tom has no pants.
The underpants are in the drawer.
Pants are in the closet!WORD
编辑:
要仅查找完整的单词,您必须将 source_word 写为\<source_word\>
.
其他可能的例子:
我有另一个文件,其中包含这些行:
I love apples.
You hate pineapples.
Apple pie is delicious.
Why do you do not like eating an apple?
We prefer pears to apples.
How many apples do you want to eat?
I have to bake three apple pies for sunday.
我有一个包含三个随机行号的列表
6
2
4
我只想在每行末尾添加--OK
,如果该行包含完整的单词apples
。
输出必须如下所示:
I love apples.
You hate pineapples.
Apple pie is delicious.
Why do you do not like eating an apple?
We prefer pears to apples.
How many apples do you want to eat?--OK
I have to bake three apple pies for sunday.
我希望也有办法
sed
,但我个人发现awk
这种更复杂的操作更容易:如果你有 GNU
awk
(gawk
Linux 系统上的默认值),你可以这样做来编辑文件:或者,如果您不介意丢失以下内容,则稍微简单一些
line_numbers.txt
:以下管道是对您的修改,输出
sed
执行您的编辑的脚本:或者,等效地,
例如,这可以生成
如果该模式出现在任何随机选择的行上,则此脚本应用替换,该替换将添加
WORD
到与该模式匹配的每一行的末尾。pants
运行它是一个阅读它的问题
sed -f
:或者,使用
awk
基于我的变体:不需要中间文件。
替换
pants
为apples
和WORD
以--OK
解决您更新的查询。这是一个oneliner(虽然有点长!)。
假设您的文本文件是“tfile”并且索引文件是 ifile,那么:
你会得到:
使用 GNU sed,我们可以从行号文件构造 sed 代码并将它们应用于数据文件:
另一种方法是我们为每个行号转录一个 sed 命令