特定のパターンが一致するまで、1行を複数行に分割します。

特定のパターンが一致するまで、1行を複数行に分割します。

各データ行を複数の行に分割し、期待される結果セットに示すように新しいファイルc1.txtにコピーしようとしています。ただし、c2.txt最終的に2つのファイルの間に違いはなく、両方のファイルはまだ同じ行数を持ちます。c1.txtc2.txttwo

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で終わる行を再接続します。#:

おすすめ記事