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

标签 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 行附加字符串 ,Yes。所以在 file_two.txt 上我有

Line 1235> [...],Z1234562,[...],Yes

在 Glenn Jackman 对 this 另一个问题的回答的帮助下,我能够弄清楚如何使用 ed 编辑器添加文本之前之后文件中的特定行。但是,我无法确定使用 ed 是否可以将文本添加到文件中行的末尾。读 documentation 我不确定是否有。到目前为止,基于 AIX site ,这就是我所拥有的:

(echo '15022a'; echo 'Text to add.'; echo '.'; echo 'w'; echo 'q') | ed -s filename.txt

这会在第 15,022 行之后附加字符串 Text to add.。我想知道是否存在与此附加等效的插入

我不使用 sed 的原因是因为我在 AIX 系统上,而且我似乎无法了解 forum 的工作原理。但是,我不确定本论坛中的 sed 命令是否只能解决在行前或行后添加文本的问题,而不是在行尾添加文本的问题,我已经在工作了。

我的下一个方法是删除我想要追加的行末尾的返回字符,追加,然后重新添加返回字符,但我不想在用尽我的选择之前重新发明轮子。也许我错过了一些东西,因为我想尽快做到这一点,但任何帮助将不胜感激。我开始不喜欢这些 AIX 系统了。也许 awk 可以帮助我,但我对 awk 不太熟悉。

我使用 Perl 编写了一个小型二分搜索子例程,以便找到我想要附加到的行。我不确定 sed、ed、grep、awk 等是否使用二分搜索,但这就是为什么我不使用 ed 或 sed 的模式替换搜索。 我希望它尽可能快,所以我我愿意接受不同的方法。

最佳答案

这是我用来从脚本调用 ed 的一般方法:

(echo '/pattern/s/$/ new text/'
 echo w ) | ed filename

这会在filename上调用ed,搜索包含pattern的行,并附加“new text”在那一行的末尾。调味。

您说您在使用 sed 时遇到了问题,但郑重声明,使用 sed 会出现同样的问题:

sed '/pattern/s/$/ new text/' filename > filename.modified

关于unix - 使用 ed 添加文本到文件中特定行的末尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40185601/

相关文章:

file - Unix命令将文件的最后一行复制到另一个文件

c++ - 传递 char ** 作为引用并返回 const char * 作为引用

bash - awk 解析文件名并将结果添加到每行末尾

bash - 使用 shell 脚本处理处理制表符分隔文件

linux - "find -readable"找到不可读的文件夹

c - 如何使用 C 将所有内容从我的终端复制到一个文件,包括标准输出和提示符?

linux - 将变量的内容写入文件

shell - 如何从另一个文件的文件中删除特定内容?

用于将 001002003004.test.com 转换为 IP 的正则表达式

python - 如何从 csv 文件中删除多个重复的行范围?