我想将文件的第三行和第五行加入到脚本的输出中,而不需要尾随新行。
是否可以使用以下代码来实现此构造:
{
echo 'Some text'
echo 'Some text'
echo -n 'Some text'
cat text
cat text
echo -n 'Some text'
echo 'Some text'
} > file
我只需要在 cat 之后添加一些选项?
假设文件的第3行和第5行text
分别是3和5。处理后必须采用以下形式:
Some text
Some text
Some text35Some text
Some text
如果我理解正确的话,在我的例子中 sed 命令的实现是很糟糕的。
答案1
使用 sed
据我了解,您有一个text
类似于以下内容的文件:
$ cat text
1
2
3
4
5
并且,您想要提取第 3 行和第 5 行并将它们放在一些语句的中间echo
。在这种情况下,请尝试:
$ { echo 'Some text'; echo 'Some text'; echo -n 'Some text'; echo -n "$(sed -n 3p text)$(sed -n 5p text)"; echo 'Some text'; echo 'Some text'; } >file
$ cat file
Some text
Some text
Some text35Some text
Some text
简化
上述操作可以通过一个echo
命令完成:
$ echo $'Some text\nSome text\nSome text'"$(sed -n 3p text)$(sed -n 5p text)"$'Some text\nSome text' >file
$ cat file
Some text
Some text
Some text35Some text
Some text
或者,作为单个printf
命令:
$ printf 'Some text\nSome text\nSome text%s%sSome text\nSome text\n' "$(sed -n 3p text)" "$(sed -n 5p text)" >file
$ cat file
Some text
Some text
Some text35Some text
Some text
sed 命令如何工作
上面使用 sed 命令,例如:
sed -n 3p text
这里-n
有一个选项,告诉 sed 不要打印任何内容,除非我们明确要求它打印。 3p
是告诉 sed 打印第三行的命令。类似地,我们使用5p
if 来打印第五行。
使用 awk
一个 awk 解决方案(帽子提示:Runium):
awk '
BEGIN{
printf "%s","Some text\nSome text\nSome text"
}
NR>5 {exit}
NR==3 || NR==5 {printf "%s", $0}
END{
printf "%s","Some text\nSome text\n"
}' text