是否可以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
.