![在 bash shell 中将 sed s/^#.../&/' 的输出分配给字符串变量?](https://linux22.com/image/1577640/%E5%9C%A8%20bash%20shell%20%E4%B8%AD%E5%B0%86%20sed%20s%2F%5E%23...%2F%26%2F'%20%E7%9A%84%E8%BE%93%E5%87%BA%E5%88%86%E9%85%8D%E7%BB%99%E5%AD%97%E7%AC%A6%E4%B8%B2%E5%8F%98%E9%87%8F%EF%BC%9F.png)
让我具体一点:不要在 sed 第一个命令中使用变量,而是将 sed 输出分配给 bash shell 中的变量,然后在第二个 sed 命令中使用变量将变量字符串附加到目标文件中的字符串末尾。
在 bash shell 中这可能吗...mvstr='sed s/^#.../&/'
为什么要这样做?尝试删除文件中行首的搜索模式“#...”并将其附加到同一文件中的字符串末尾。
$MVSTR 可能是 #spx、#loc、#con 第二个 sed 命令?s/"$MVSTR"/$;\"/w line ends with ;" 并写入文件
是否有一行代码可以在 8000 个文件中完成此操作?
答案1
编写 sed“-e”字符串并不总是那么容易。
在测试文件上尝试一下:
MVSTR="#loc";sed -re "s/^$MVSTR(.*)$/\1$MVSTR/" filename
或者使用替换字符串作为文字:
sed -re "s/^(#loc)(.*)$/\2\1/" filename
(未经测试)
请注意,在 sed 's' 命令的第一部分中,$ 等于“行尾”。并且,要让 bash 替换引用的 sed 命令中的 MVSTR,它必须放在双引号内,这不仅是为了保护它免受其他 bash“干预”。\1 和 \2 是“自动变量”,包含搜索部分中第一个和第二个括号的内容。
顺便一提http://tldp.org有几个不错的 Bash 指南...在这些指南中,您可以找到如何在任意数量的文件中执行此操作的示例。查找命令find
。