1つのライナーでできますか?
私は次のような結果を得ました。
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
この入力は自動的に生成されます。
各行で"
(quote + space)の最初の項目を(quote)に置き換えたいと思います。代替エントリをグローバルに適用すると、toが"
発生するたびに変更されるため、sed onelinerを使用してこれを実行できるかどうか疑問に思います。line" -
line"-
^
私はこのように使ってみました。
sed -r ':a;N;$!ba;s/(\^\" )/\"/g'
しかし、それはうまくいかず、何も置き換えません。頑張った
sed -r ':a;N;$!ba;s/(^|\" )/\"/g'
そしてそれはすべてのイベントを置き換えます。私はsedを使い始めたので、私が何か間違っているかどうかわかりません。
私がここで何を見逃しているのでしょうか?
答え1
あなたはとても考えています。 sed
デフォルトは、行の最初のインスタンス(修飾子なし/g
)のみを置き換えることです。しかし、行の先頭にあるインスタンスほど行の最初のインスタンスが必要ないので、まだ固定したいと思います。通常、明示的な行操作を使用しようとする必要はありません(なぜですか)。
sed 's/^" /"/'
答え2
もっと一般的な答えはgeekosaurの答えについて言及できないので、^(ラインアンカーの始まり)を配置しません。たとえば、A の最初の項目を B に置き換えるには、次のようにします。
sed 's/A/B/'
答え3
使用真珠
~$ perl -pe 's/^" /"/;' file
使用幸せ(以前のPerl_6)
~$ raku -pe 's/^\" \s /"/;' file
入力例:
"First line" - Description
" Second line" - Description
"Third line" - Description
" Fourth line" - Description
サンプル出力(2つのコード例):
"First line" - Description
"Second line" - Description
"Third line" - Description
"Fourth line" - Description
https://perldoc.perl.org/perlre
https://perldoc.perl.org/perltrap#Sed-Traps
https://docs.raku.org/言語/regexes