假设文本中的内容为:
aaaa
bbbb
ccccc
dddd
要求将文本内容处理为:
aaaa bbbb
cccc dddd
(中间以制表符分隔)
方法一:
sed -n '{N;s/\n/\t/p}' test.txt
方法二:
awk '{tmp=$0;getline;print tmp"\t"$0}' test.txt
文本操作(awk,sed) 三行合并为一行
linux下的文本操作
test.txt文件内容如下
[root@localhost abc]# cat test.txt
1
2
3
4
5
6
7
8
9
10
sed方法:
sed 'N;N;s/\n/ /g' test.txt
[root@localhost abc]# sed 'N;N;s/\n/ /g' test.txt
1 2 3
4 5 6
7 8 9
10
说明:N 追加下一个输入行到模式空间,用了两次把当前行的后两行都追加到了模式空间,即多行模式空间。让后用s将\n换行符替换成空格。最后的g是全局替换即替换所有的\n,若不加g表示只替换第一个。
awk方法:
awk 'ORS=NR%3?" ":"\n"{print}' test.txt
[root@localhost abc]# awk 'ORS=NR%3?" ":"\n"{print}' test.txt
1 2 3
4 5 6
7 8 9
10
或者将其输入至另一个文件
awk 'ORS=NR%3?" ":"\n"{print $0 >> "abc" }' test.txt
Linux shell中使用sed 替换\n换行符 (多行边一行、一行变多行)
基本语法:
sed "s/要匹配的字符串/要替换成的字符串/g" test.gson
语法解释:sed是按行处理文本数据的,每次处理一行数据后,都会在行尾自动添加trailing newline,其实就是行的分隔符即换行符。连续两行执行一次sed命令,这样就可以把前一行的\n替换完成。(Ps:执行一次命令其实就是数据两两去除了中间的\n而已)
(多行)替换/删除所有换行符(变一行):
sed -i ":a;N;s/\\n//g;ta" test.gson
语法解释:前边加上(:a;N;) 后边加上( ;ta)将解决上面所说的一次命令只能替换文本二分之一内容的问题
(一行)拆分成独立行(变多行):
sed -i "s/拆分符/拆分符\\n/g" test.gson