0
点赞
收藏
分享

微信扫一扫

用sed和awk实现将文本中的上下多行合并为一行

zhaoxj0217 2022-01-21 阅读 185

假设文本中的内容为:

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
举报

相关推荐

0 条评论