sed 里面的 sed 命令

sed 里面的 sed 命令

是否可以sed在里面运行命令sed,如下所示:

sed -i.bak -e '${sed -n 1,1p file.txt},$d' output.file

我希望第一行的file.txt数字作为输入参数,output.file该行之后的所有行都将被删除。

答案1

这不是sed内部命令sed,这只是您的 shell 在实际调用之前所做的替换sed。只需使用正确的引用和括号,就完成了:

sed -i.bak -e "$(sed -n 1,1p file.txt),\$d" output.file

双引号允许内部进程替换(单引号不允许),$()语法意味着捕获并替换内部命令的结果。请注意,\$必须进行转义以防止$d被解释为变量。

编写相同内容的一种不太令人困惑的方式是

n=$(sed -n 1,1p file.txt)
sed -i.bak -e "${n}\$d" output.file

您也可以像这样编写"${n}"',$d',只需bash将不同的带引号的字符串(包括未带引号的字符串)放在一起即可连接它们。

另外,您可能想写sed -n '1{p;q}' file.txt。首先,如果只指定一个行号,则不必编写范围。其次,如果您在打印第一行 ( q) 后退出,它不会无缘无故地读取整个文件 - 效率更高。因为是第一行,所以-n也可以省略。或者,您可以使用head -n1 file.txt.

相关内容