番号付きヘッダーを取得し、数字なしでツリー構造に書き込む sed スクリプトを作成しようとしています。
入力は次のとおりです。
1. Text1
1.1 Text2
1.1.1 Text3
1.1.1.1 Text4
1.1.1.1.1 Text5
2. Text6
2.1 Text7
これは表現空間を持つ望ましい出力です.
。
Text1
.Text2
..Text3
...Text4
....Text5
Text6
.Text7
答え1
すべてのUnixシステムのすべてのシェルでawkを使用してください。
$ awk '{sub(/\.$/,"",$1); gsub(/[^.]/,"",$1); sub(/ /,"")}1' file
Text1
.Text2
..Text3
...Text4
....Text5
Text6
.Text7
質問で数値型で始まる行だけを修正して印刷すると、次のようになります(テストされていません)。
awk '/^([0-9]\.)+[0-9]* /{sub(/\.$/,"",$1); gsub(/[^.]/,"",$1); sub(/ /,""); print}' file
上記のコードは、「テキスト」のすべての連続した空白チェーンを単一の空白文字に変更します。これが問題になる場合は、これを行わないように簡単に修正できますが、これらのユースケースに対処するには、「テキスト」の入出力例を提供する必要があります。
答え2
sed -r 's/^[0-9]+(\. )?//;s/\.[0-9]+/./g;s/^(\.*) /\1/' inputfile
これにより、変更された行のみが出力されます。
sed -rn '/^[0-9]+((\. )|((\.[0-9]+)* ))/{s/^[0-9]+(\. )?//;s/\.[0-9]+/./g;s/^(\.*) /\1/;p}' inputfile