我有两个文件,都包含数万行。我正在从 file_one.txt 中获取一个字符串( Z1234562 )并尝试查看它是否在 file_two上。 TXT 即可。如果它在 file_two.txt 上找到,我将返回匹配所在的行号 - 在本例中为第1235行。我已经将其工作了。
file_one.txt
Line 1> [...]_Z1234562
file_two.txt
Line 1234> [...],Z1234561,[...]
Line 1235> [...],Z1234562,[...]
Line 1236> [...],Z1234563,[...]
但是,我现在想在第1235行附加字符串,是。所以在file_two.txt上我有
Line 1235> [...],Z1234562,[...],Yes
在Glenn Jackman对this其他问题的回答的帮助下,我能够弄清楚如何使用ed编辑器 和添加文本在 文件中的特定行之后。但是,我无法弄清楚是否可以将文字添加到文件中某一行的 end 。阅读documentation我不确定是否存在。到目前为止,基于这个AIX site,这就是我所拥有的:
(echo '15022a'; echo 'Text to add.'; echo '.'; echo 'w'; echo 'q') | ed -s filename.txt
这会在第15022行之后追加字符串 Text to add。。我想知道是否有一个 insert 等同于这个追加。
我没有使用sed的原因是因为我在AIX系统上而且我似乎无法得到forum工作的内容。但是,我不确定这个论坛中的sed命令是否只解决了在行之前或之后添加文本而不是在行的末尾添加文本,我已经在工作。
我的下一个方法是删除我想要追加的行的末尾的返回字符,追加,然后重新添加返回字符,但我不想在耗尽我的选项之前重新发明轮子。也许我错过了一些事情,因为我想尽快做到这一点,但任何帮助将不胜感激。我开始不喜欢这些AIX系统。也许awk可以帮助我,但我对awk不太熟悉。
我使用Perl编写了一个小的二进制搜索子例程,以便找到我想要追加的行。我不确定sed,ed,grep,awk等是否使用二进制搜索,但这就是为什么我不使用ed或sed的模式替换搜索。我希望它尽可能快,所以我我愿意采用不同的方法。
答案 0 :(得分:3)
以下是我用于从脚本调用ed
的一般配方:
(echo '/pattern/s/$/ new text/'
echo w ) | ed filename
这会在ed
上调用filename
,搜索包含pattern
的行,并在该行的末尾附加“new text
”。品尝季节。
你说你在使用sed
时遇到了问题,但是对于记录来说,这是使用sed
的同样的事情:
sed '/pattern/s/$/ new text/' filename > filename.modified
答案 1 :(得分:0)
首先我们创建一个测试文件foo
:
$ cat > foo
foo
bar
如果您已经知道要修改的行号,例如上一个示例和第2行使用sed
:
$ sed '2s/$/foo' foo
foo
barfoo
在awk
你要命令:
$ awk 'NR==2 {sub(/$/,"foo")} 1' foo
foo
barfoo
在perl
:
$ perl -p -e 's/$/foo/ if $. == 2' foo
foo
barfoo
答案 2 :(得分:0)
您可以使用j
命令
(.,.+1)j
加入已提到的行。已删除的行将从缓冲区中删除,并替换为包含其连接文本的单行。当前地址设置为结果行。
所以你只需要修改你以前的命令:
cat << EOF | ed -s filename.txt
15022a
Text to add.
.
-1,.j
wq
EOF