ファイルを生成したとしましょう。ファイルはコマンド実行として生成されます。ファイルの内容は以下のように最大4行まで可能です。
LUN Path: servernam:/vol/server_xx_t1_01_223_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_225_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_226_04/mssql01/server_StorageSystemLevel100.lun
LUN Path: servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun
「servernam:/vol/serverxxxx」という2番目の文字列を取得し、次のコマンドを実行できるように/ awk / whateverを介してこのファイルをパイプするにはどうすればよいですか?
rm servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun
そのため、ファイルから正しい文字列を抽出し、コマンドの引数として含めたいと思います。 4つの異なる文字列すべてに同じ実行コマンドが必要であることに注意してください。スクリプトの例やコマンドラインの例を提供していただきありがとうございます。
答え1
ls $(awk '{print $3}' /path/to/your/file)
これが期待どおりに機能することを確認し、次のものls
と交換します。rm
答え2
echo rm $(sed -n -e 's/[^A-Za-z0-9]/\\&/g' -e 's/LUN Path: *//p')
最初のs
コマンドは、改行、文字、または数字ではなく、各文字の前にバックスラッシュを追加します。 2番目のコマンドは、LUN Path:
プレフィックスのある行からプレフィックスを削除し、プレフィックスのある行のみを印刷します。結果の文字列はファイル名に展開され、シェルでトークン化されます。改行以外の問題のあるすべての文字がエスケープされているため、正しいファイル名がコマンドに渡されます。
答え3
cut -d: -f3 file | xargs rm
このコマンドは、ファイル内のcut
3番目に区切られたフィールド(次のファイル名)を選択し、同時に改行区切りのパスを読み取ります。:
servernam:
xargs
rm
servernam:
実際のパスの一部になるには、各行のスペースで区切られた最後のフィールドを抽出するコマンドを置き換えますcut
。awk '{ print $NF }'
このusingはパス名にスペースがないと仮定しcut
、usingはパスにスペースがないと仮定します。:
awk