あなたのsedコマンドの問題は、 "スペースが続くすべて"( "* *")を取って、それを "nothing"に置き換えることです。あなたがしなければならないことは、すべてを最初のスペースまで掴んで保存し、すべてを保存したビットで置き換えることです。入力文字列の一部を保存するには、正規表現のその部分をかっこで囲みます:(.*)
これは\1
を使用して置換文字列に入れられます。
しかし、それ以上のことがあります。 sedは欲張りです - できるだけ多くをつかみます。だから、 "abc def ghi"のような文字列があると、 "abc def"の後に空白があり、そのすべてをつかむことがわかります。だから質問は、最初の部分まで、最初の部分までどのように取得するのですか?
デリミタではない文字(スペース)の後ろに空白をすべて選択できます。したがって、上記の例では、の間の文字がとdの間にスペースがあるため、選択されず、のabc部分のみがスペースになります。
それでは、あなたがで終わることはこれです:
は、マッチングパターンは、(それを保存するために括弧内にある)「と同じ数のスペースではありません何も、」
"([^ ]\*)"
で構成されてい
sed "s/\([^ ]*\) .*/\1/"`
単一のスペース" "
、そして次に何か".*"
。置換文字列"\1"
は、 "最初の括弧セットの正規表現の部分と一致するものは何でも"です。
Testing: cat testout.txt
cat: testout.txt: No such file or directory
Testing: cat testin.txt
abc def ghi
asdf jkl; fdsa ;lkj qwerty 123
Once upon a time
When in the course
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
Testing: cat testin.txt | sed "s/\([^ ]*\) .*/\1/" >> testout.txt
Testing: cat testout.txt
abc
asdf
Once
When
abc
asdf
Once
When
Testing:
それは、testout.txt testin.txtでと4行に何もで始まる:
は、ここで私がやった簡単なテストです。次に、testin.txtの内容をsedに送信し、出力をファイルに追加します。次に内容を表示します。私はそれが本当に追加されていることを示すためにもう一度やりました(testout.txtには8行あります)(注:読みやすくするために空白行を追加しました)
質問がある場合はお知らせください。
希望すると便利です。
非常によく説明され、ありがとう! – GeorgeOfTAC