[英]How to add a number at the end of a certain line for multiple files in Linux?
我有一个文件列表,文件名是file1.txt, file2.txt, ..., file100.txt
。
在每个文件中,内容如下:
abcd
efgh
ijkl
data
wxyz
如何在 Linux 中为多个文件的第 4 行末尾添加一个数字,以便file1.txt
的新内容为:
abcd
efgh
ijkl
data1
wxyz
file2.txt
的内容是:
abcd
efgh
ijkl
data2
wxyz
等等。
通常有很多方法可以在 Bash 中实现任何目标,具体取决于问题的确切性质。 然而,这条线似乎接近你所要求的:
printf '%s\0' {1..100} | xargs -0 -I{} sed -i 4s/$/{}/ file{}.txt
printf
命令与大括号扩展一起使用以创建一个字符串,该字符串由由空字节分隔的数字1
到100
组成。 ( printf
是一个非常有用的命令,有时比echo
命令更好地遵循最少惊喜的原则,恕我直言。)
然后使用xargs
命令为每个命令运行一个命令。 -0
标志告诉它输入项目由空字节(而不是空格)分隔, -I{}
参数告诉它搜索命令并用项目替换字符串{}
。 给xargs
的命令是sed -i 4s/$/{}/ file{}.txt
。 4
是指向文件第 4 行的地址。 s/$/{}/
匹配行尾标记并将匹配替换为右侧斜杠之间的值。 file{}.txt
显然是指第{}
个文件。
这样做的结果是运行以下命令:
sed -i 4s/$/1/ file1.txt
sed -i 4s/$/2/ file2.txt
...
sed -i 4s/$/100/ file100.txt
这对于所问的问题非常具体,因为执行的是这些确切的命令,因此如果您的情况实际上比这更普遍,请买家注意。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.