次のデータを含むファイルがあります。 https://pastebin.com/TXrmVpwF 私が達成したいのは、パターンがありますが、名前に拡張子やドットがないすべての行を見つけて削除し、trueの場合はその後の空の行を削除することです。
パターン:
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
答え1
ファイルがUnixテキストファイル(DOSテキストファイルではない場合はdos2unix
最初に実行する必要があります)であるとします。
sed '/^#/{ /\./!{ N; /\n$/d; }; }' <file
注釈付きsed
スクリプト:
/^#/{ # The current line starts with a "#"
/\./!{ # The current line does not contain a dot
N; # Append next line with a \n in-between
/\n$/d; # The line just appended was empty, delete, start next cycle
}
}
# (implicit print)
ディレクトリ名にはドットが許可されていますが、最後のパス名部分にはドットが許可されていない場合(つまり、後に# /x.x/text
空白行がある場合は削除する必要があります)/\./
に変更します/\.[^/]*$/
。
答え2
質問についてはよくわかりませんが、答えは次のとおりです。
grep -v '\.' TXrmVpwF | grep -e '/'
grep -v '\.'
:点付きの行をフィルタリングします。
grep -e '/'
: 残りのパスを取得します。
結果は次のとおりです。
# /x/123
# /x/test
# /x/test_backup
# /x/123/10
# /x/123/100
# /x/123/103
# /x/123/1333