正確には、次のテキストファイル(test.txt)があります(インスタンスごとに同じ数のオプション)。
# a comment
first: info about first: option1 \
option2 \
option3
second: info about second: option1 \
option2 \
option3
#third: info about third: option1 \
# option2 \
# option3
fourth: info about fourth: option1 \
option2 \
option3 \
テキストを次のように再構成したいと思います。
a comment first: info about first: option1 option2 option3
second: info about second: option1 option2 option3
third: info about third: option1 option2 option3
fourth: info about fourth: option1 option2 option3
答え1
単一のsedプログラムを使用する:
sed -E '
# remove leading comment chars
s/^[[:blank:]]*#+[[:blank:]]*//
# label "a" for branching
:a
# if trailing slash:
/\\$/ {
# read next line
N
# remove backslash, newline, leading whitespace and comment char
s/\\\n[[:blank:]]*#*[[:blank:]]*/ /
# branch to label "a"
ba
}
# remove blank lines
/^[[:blank:]]*$/d
' test.txt
しかし、Perlは非常にコンパクトです。段落()を読み、段落の各行から先行スペースと-00
コメント文字(/m
および修飾子)を置き換えて、末尾のバックスラッシュ改行文字を削除します。/g
perl -00 -lanE 's/^\s*#*\s*//mg; s/\\(?:\Z|\n)/ /g; say' test.txt
答え2
sed 's/^#/ /g;s/\\/ /g' file | xargs | sed 's/option3 /option3 \n/g'
a comment first: info about first: option1 option2 option3
second: info about second: option1 option2 option3
third: info about third: option1 option2 option3
fourth: info about fourth: option1 option2 option3
sed 's/^#/ /g
#
スペースに置き換えて文字列の位置^
と一致します。#
その後、sed s/\\/ /g'
バックスラッシュを空白に置き換えます。\
xargs
単語間に同じスペースを配置して作成します。
最後に、sed
各単語「option3」の後に新しい行を追加します。