我正在寻找替换\ n字符的最简单方法,但仅限于包含特定表达式的给定行。
输入看起来像这样
00:03:04
text alphabetic abcde
00:03:08
text alphabetic abcde
00:03:17
text alphabetic abcde
00:03:26
text alphabetic abcde
输出就像
00:03:04 text alphabetic abcde
00:03:08 text alphabetic abcde
00:03:17 text alphabetic abcde
00:03:26 text alphabetic abcde
现在我只想在非字母行中替换\ n。
我想最简单的方法是使用'tr',但我看不出如何将其限制为指定的行。
我摆弄了sed,但这看起来很有问题。
我无法相信没有优雅的说法 “在以[0-9] [0-9]开头的行上替换换行符:”。
你会怎么做?
答案 0 :(得分:1)
你必须使用"保持缓冲区":
~$ sed -r'/[0-9][0-9]:/ {N; s/ *\n/ /}' myfile
00:03:04 text alphabetic abcde
00:03:08 text alphabetic abcde
00:03:17 text alphabetic abcde
00:03:26 text alphabetic abcde
N
说:阅读下一行并附加到当前行
然后我们进行替换s/\n/ /
(因为在你的例子中你有一些空格,你必须删除它,因此*
部分)。
而且,只有当行以/[0-9][0-9]:/
请注意,如果您的文件严格符合以下格式:
time
text
time
text
...
您不需要/[0-9]/
部分:
~$ sed '{N; s/ *\n/ /}' myfile
00:03:04 text alphabetic abcde
00:03:08 text alphabetic abcde
00:03:17 text alphabetic abcde
00:03:26 text alphabetic abcde
答案 1 :(得分:0)
此awk
应该:
awk 'ORS=NR%2?FS:RS' file
00:03:04 text alphabetic abcde
00:03:08 text alphabetic abcde
00:03:17 text alphabetic abcde
00:03:26 text alphabetic abcde
这会根据行号(奇数/偶数)
更改输出记录选择器答案 2 :(得分:0)
如果你想加入每一行:
paste -d " " - - < filename
答案 3 :(得分:0)
sed -n '/^[0-9:]*$/!{H;x;s/\n/ /;p;b};h' input
给出:
00:03:04 text alphabetic abcde
00:03:08 text alphabetic abcde
00:03:17 text alphabetic abcde
00:03:26 text alphabetic abcde