GNU/Linux >> Linux の 問題 >  >> Linux

コマンド ライン:出力から部分文字列を抽出する

$ echo "Watermelons and cucumbers" | cut -d ' ' -f 3
cucumbers

-d ' ' cut に伝えます スペースで分割します。 -f 3 3 番目の列を選択します。

awk も使用できます 、これはすでにスペースに基づいて分割を行い、列を $1 として使用できるようにします 、 $2 、…

$ echo "Watermelons and cucumbers" | awk '{ print $3 }'
cucumbers

おそらく、@slhck によって既に指定されたオプションの 1 つを使用するでしょうが、これを行う方法がいくつかあります:

<オール>
  • 他の言語と同じように、配列を使用する:

    $ foo=( $(SayStuff) ) 
    $ echo ${foo[2]}
    cucumbers
    

    var=() 配列を宣言します $(command) コマンドの出力を保存します。つまり、foo=( $(SayStuff) ) SayStuff の出力を保存します 配列 foo に そしてゆうおう echo ${foo[2]} の 3 番目の要素です .

  • sed

    $ SayStuff | sed 's/.* \(.*\)/\1/'
    cucumbers
    

    sed コマンドは (s/// ) 最後の単語ですべて。正規表現は、スペース (.*) までのすべてに一致します ) 最後のスペースまですべてに一致し、最後の単語 (\(.*\) をキャプチャします .単語はキャプチャされているため、\1 として参照できます。 .

    より単純なバージョン:

    $ SayStuff | sed 's/.* //'
    cucumbers
    
  • バッシュ

    $ foo=$(SayStuff); echo ${foo##* } 
    cucumbers
    

    これは、bash の文字列操作機能を使用します。詳細については、こちらを参照してください。

  • もっとバッシュ

    $ SayStuff | while read a b c; do echo $c; done
    cucumbers
    
  • Perl ではもちろん、これを行う方法はたくさんあります:

    $ SayStuff | perl -lane 'print $F[$#F]'
    cucumber
    

    -a perl になります awk のように振る舞う 、空白で行を分割し、配列 @F に保存します .次に、@F の最後の要素を出力します ($#F @F の要素数 )。 -lprint に改行を追加するよう perl に指示します ステートメント、-n STDIN を 1 行ずつ処理し、-e を処理する必要があります。 コマンドラインで指定されたスクリプトを実行する必要があります。

    $ SayStuff | perl -pe 's/.* //'
    cucumber
    

    オプションについては上で説明しましたが、最後のスペースまですべてを削除して印刷するだけです (-p ).

    $ perl -le 'print $ARGV[$#ARGV]' $(SayStuff)
    cucumbers
    

    ここでは Watermelons and cucumbers を渡しています perl が @ARG に保存する引数として 配列なので、@ARG の最後の要素を出力します .

  • 策略。これは sed を使用しています スペースを改行に変換してから tail に変換します 最後の行だけを印刷します。

    $ SayStuff | sed 's/ /\n/g' | tail -n 1
    cucumbers
    
  • -o を使用した grep と正規表現 一致した文字列のみを出力します。

    $ SayStuff | grep -Po '\w+$' 
    cucumbers
    
  • 不正行為

    $ SayStuff | grep -o cucumbers
    cucumbers
    

  • もう少し説明があります:

    Usage: cut OPTION... [FILE]...
    
    Print selected parts of lines from each FILE to standard output.
    
       -d, --delimiter=DELIM
              use DELIM instead of TAB for field delimiter
    
       -f, --fields=LIST
              select only these fields;  also print any line that contains  no
              delimiter character, unless the -s option is specified
    

    したがって、3 番目のフィールドが必要で、スペース ' ' で区切られている場合は、

    $ echo "Watermelons and cucumbers" | cut -d ' ' -f 3  
    cucumbers
    

    LAST が必要な場合 おそらく awk を使用する必要があるフィールド .
    この場合は次のようになります:

    <ブロック引用>

    $ echo "スイカとキュウリ" | awk '{ print $NF }'
    きゅうり

    awk で NF は行のフィールド数なので $NF 行の最後のフィールドを意味します。


    Linux
    1. Linuxのコマンドラインからトレントを検索

    2. コマンドラインからHdmiへのオーディオ出力を変更するにはどうすればよいですか?

    3. Linux コマンド出力の最初の行を省略する

    1. コマンドラインから使用しているOsXのバージョンを確認するにはどうすればよいですか?

    2. Linux –コマンドラインからPulseaudio出力デバイスをロバストに切り替える方法は?

    3. コマンドラインからの Clonezilla

    1. コマンドラインからWordPressのバージョンを見つける

    2. ffmpeg出力から継続時間を抽出するには?

    3. Python から Linux コマンドを実行する