我试图将每一行数据拆分为c1.txt
多行并将其复制到新文件,c2.txt
如预期结果集中所示。但最终两者之间没有区别,c1.txt
并且c2.txt
两个文件的行数仍然相同two
c1.txt
# file: /home/mytest/data # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::--- default:user::rwx default:group::r-x default:group:smr:rwx default:group:agm:r-x default:mask::rwx default:other::---
# file: /home/mytest/datasr123 # owner: own # group: group-sm user::r-x group::rwx mask::rwx other::---
代码
awk -v dt="file :" '$0 ~ dt {gsub(dt, "\n"dt)}1' c1.txt > c2.txt
预期结果
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
答案1
使用sed
,我们可以这样做:
sed -E ':j s/ ([^ ]*)$/\n\1/; t j;' infile \
| sed -E ':j /(:|#)$/ { N; s/\n/ /;t j; }'
第一个sed
命令是在从行尾开始看到的每个空格上分解该行;
第二个命令连接回以 a或sed
结尾的那些行。#
:
答案2
替代awk
awk '{ for (i=1; i<=NF; i++) if ($i ~ "[#:]$" ) printf $i" "; else print $i; }' c1.txt
还有一种sed
变体,尽管更脆弱
sed -E "s/([^:#]) ([#a-z])/\1\n\2/g" c1.txt
答案3
使用 GNU awk for FPAT 并假设,就像您发布的示例输入一样,您的实际输入在文件名中没有空格等:
$ awk -v FPAT='(#\\s+\\S+:\\s+)?\\S+' '{for (i=1; i<=NF; i++) print $i; print ""}' file
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
答案4
对我来说效果很好
for ((i=1;i<=2;i++)); do sed -n ''$i'p' filename |sed "s/#/\n#/g" |sed '/^$/d'| sed "3s/ /\n/3g";echo " "| sed "s/.*/&\n/g"; done
输出
# file: /home/mytest/data
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:group::r-x
default:group:smr:rwx
default:group:agm:r-x
default:mask::rwx
default:other::---
# file: /home/mytest/datasr123
# owner: own
# group: group-sm
user::r-x
group::rwx
mask::rwx
other::---