我正在尝试为报告准备文件。我拥有的是这样的:
foo
bar bar oof
bar oof
foo
bar bar
我正在尝试获得这样的输出:
foo bar bar oof
bar off
foo bar bar
我想搜索一个字符串,在本例中为'foo',并且在找到字符串的行内我必须删除换行符。
我做了搜索,但我只能找到'foo'也被删除的解决方案。我怎样才能做到这一点?
答案 0 :(得分:1)
使用awk
:
awk -v search='foo' '$0 ~ search{printf $0; next}1' infile
如果您的字段在换行符之前没有前导空格,则可以使用下面的printf $0 OFS
awk -v search='foo' '$0 ~ search{printf $0 OFS; next}1' infile
测试结果:
$ cat infile
foo
bar bar oof
bar oof
foo
bar bar
$ awk -v search='foo' '$0 ~ search{printf $0; next}1' infile
foo bar bar oof
bar oof
foo bar bar
说明:
-v search='foo'
- 设置变量search
$0 ~ search
- 如果行/记录/行包含变量中提到的regexp / pattern / string {printf $0; next}
- 打印没有记录分隔符的当前记录并转到下一行}1
1执行默认操作,即打印当前记录/行。答案 1 :(得分:0)
您可以使用sed
轻松完成此操作,例如:
$ sed '/^foo$/N;s/\n/ /' file
foo bar bar oof
bar oof
foo bar bar
<强>解释强>
/^foo$/
查找仅包含foo
N
读取/追加下一行输入到模式空间。
s/\n/ /
将'\n'
替换为space
。