一部の行はで始まり、#
任意の数字(1つ以上の数字)で始まります=
。ハッシュで始まる行の場合、行の先頭から等号(含む)までのテキストを削除します。
ファイルの例:
some text
#5=get('data');
;done;
結果ファイル:
some text
get('data');
;done;
答え1
sed 's/^#[[:digit:]]\{1,\}=//' < file.in > file.out
ほとんどのsed
実装では、このオプションを使用して、次に置き換えることができる-E
拡張正規表現を取得できます。\{1,\}
+
sed -E 's/^#[[:digit:]]+=//' < file.in > file.out
[[:digit:]]
そのロケールで10進数で分類された文字と一致します。 GNUシステムでは常に一致します[0123456789]
。他の場合は、他の10進数と一致する可能性があります(0123456789を除く)。一致は[0-9]
通常、ややランダムですが、常に0123456789を含み、他のASCII文字は含まれません。よくわからず、正確に何と一致させたい場合を使用してください[0123456789]
。
または、次のものを使用できますperl
。
perl -pe 's/^#\d+=//' < file.in > file.out
\d
[0123456789]
そのオプションを渡さない限り、一致します-C
。この場合、入力をUTF-8でエンコードされていると解釈し(ロケールがUTF-8を使用している場合)、Unicodeが10進数で分類する文字と一致します(例:0123456789٠١٢٣٥٦٧٨٩0123456789
答え2
使用awk
:
$ awk '{sub(/^#[[:digit:]]+=/, "")}1'
使用pcregrep
:
$ pcregrep -o2 '(^#\d+=)?(.*)' file
-o2
2番目のキャプチャされたグループを印刷します(.*)
。
@StéphaneChazelasのおかげで、すべての正規表現。
~からpcregrep
手動:
- モールド数字、--一致のみ=numberは、指定された数字のキャプチャ括弧に一致する行部分のみを表示します。
答え3
使用幸せ(以前のPerl_6)
~$ raku -pe 's/^ "#" \d+ \= //;' file.txt
または:
~$ raku -pe 's/^ 「#」 \d+ \= //;' file.txt
上記は、Perlシリーズのプログラミング言語であるRakuで書かれた答えです。基本的に私は@StéphaneChazelasの優れたPerlの答えを得て、Rakuに翻訳しました。
Rakuには、多くの人がより簡単に理解して使用できる新しい正規表現エンジンがあります。たとえば、上記の個々の正規表現「atoms」はスペースで自由に区切ることができます(これは明らかにPerlの/x
オプションと同じです)。また、\d
(短縮された)形式は含むUnicode番号。したがって、ASCII番号のみが必要な場合は[<:ASCII> & <:N>]
(Unicode)形式または<[0..9]>
(カスタム文字クラス)形式を使用してください。
入力例:
some text
#5=get('data');
;done;
出力例:
some text
get('data');
;done;
エスケープ文字に関する注意: みんなRaku正規表現の文字以外の文字は、リテラルとして理解されるようにalnum
エスケープまたは引用する必要があります(などの文字以外の文字を考え、alnum
残りの非文字は将来のメタ文字の使用のために予約されていると想像してください)。\.
\*
\+
alnum
[警告:タコソフ文字はここで#
必須"…"
または引用されているようです。「…」
バックスラッシュのエスケープ処理が私の手ではないようです。おそらく、Rakuが#
コメントを許可しているからです。以内に正規表現。 ]。