各データ行を複数の行に分割し、期待される結果セットに示すように新しいファイルc1.txt
にコピーしようとしています。ただし、c2.txt
最終的に2つのファイルの間に違いはなく、両方のファイルはまだ同じ行数を持ちます。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
コマンドは、行の終わりから始まり、見えるすべての空白の行を置き換えます。
2番目のコマンドは、または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
FPATにGNU awkを使用して公開した例の入力など、実際の入力のファイル名などにスペースがないとします。
$ 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::---