使用文件中的数字生成 sed 命令

使用文件中的数字生成 sed 命令

我有一个输入文件,如下所示:

1
30
35
90 ...

我想做的是修改它,以便它向我显示以下内容:

sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify

你知道我如何在 Linux 中做到这一点吗?

答案1

假设您有一个包含行号的文件,lines.list并且您想要创建一个在列出的每一行上sed执行的编辑脚本:s///g

sed 's:$:s///g:' lines.list

给定一个包含问题中显示的四个数字的文件,这将生成sed脚本

1s///g
30s///g
35s///g
90s///g

s///g它通过添加到每行的末尾来实现这一点。为了避免转义斜杠,s脚本中的命令使用:作为替代分隔符。

运行这个脚本需要使用sed -f

sed 's:$:s///g:' lines.list | sed -i -f /dev/stdin file_to_modify

这将创建sed如前所示的脚本,然后将其应用到某个名为file_to_modify.由于我使用的是-i,这也会在文件中进行就地编辑,假设我们使用的是sed知道此选项的文件(例如 GNU sed)。

但请注意,编辑脚本本身没有什么意义。带有替换命令的空正则表达式将重新使用最近匹配的正则表达式。由于脚本中没有这样的表达式,因此第一个s命令将触发sed.

答案2

我会做什么

sed -E "s:[0-9]+:sed -i '&s///g' file_to_modify:" file

输出

sed -i '1s///g' file_to_modify
sed -i '30s///g' file_to_modify
sed -i '35s///g' file_to_modify
sed -i '90s///g' file_to_modif

或组合为单个调用

sed -E 's:[0-9]+:&s///g:' file |
    paste -sd ';' |
    sed "s:.*:sed -i '&' file_to_modify:"
sed -i '1s///g;30s///g;35s///g;90s///g' file_to_modify

相关内容