使用ed将文本添加到文件中特定行的末尾

时间:2016-10-21 21:19:38

标签: unix awk sed aix ed

我有两个文件,都包含数万行。我正在从 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的模式替换搜索。我希望它尽可能快,所以我我愿意采用不同的方法。

3 个答案:

答案 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