私はregexとsedに初めて触れ、単純なregexと思われるものを作ろうとしています。単語の末尾の文字を削除したい(「o」の場合)。
- 入力文字列:こんにちはこんにちは
- 予想出力:地獄地獄
良いニュース:文字列の末尾にある「o」を削除できます。
$ echo 'Hello Hello' |sed 's/\(.*\)o/\1/g'
Hello Hell
$ echo 'Hello Hello' |sed 's/\(.*\)o$/\1/g'
Hello Hell
悪いニュース:文字列の前の単語からその単語を削除することはできません。私は私が考えることができるすべてのアンカー記号を試しました。その結果、単語の末尾にある「o」は1つも削除されませんでした。
$ echo 'Hello Hello' |sed 's/\(.*\)o\b/\1/g'
Hello Hello
$ echo 'Hello Hello' |sed 's/\(.*\)o\>/\1/g'
Hello Hello
$ echo 'Hello Hello' |sed 's/\(.*\)o\W/\1/g'
Hello Hello
$ echo 'Hello Hello' |sed 's/\(.*\)o\s/\1/g'
Hello Hello
私が間違ったことを教えて、私の精神を取り戻すのを手伝ってもらえますか?
更新:私は私のマシンが他の人のマシンとは異なる結果を生み出すという明確な印象を受けました。私はMacbookでターミナルウィンドウを使用しています。誰もがこれについて明らかにすることができれば教えてください。
ベストアンサー1
echo 'Hello Hello' | sed 's/o$//'
あなたよりも私にとってもっと役に立つと思います。
echo 'Hello Hello' | sed 's/\(.*\)o$/\1/g'
あなたの質問は出力に関するものです
echo 'Hello Hello' | sed 's/\(.*\)o\b/\1/g'
はいHello Hello
、しかし私にとってはそうですHello Hell
。で修正してください
echo 'Hello Hello' | sed 's/\([^o]*\)o\b/\1/g'
しかし、
echo 'Hello Hello' | sed 's/o\b//g'
私にとってはより良いようです。