ファイルの各行にある特定の文字列に対してコマンドを実行するには?

ファイルの各行にある特定の文字列に対してコマンドを実行するには?

ファイルを生成したとしましょう。ファイルはコマンド実行として生成されます。ファイルの内容は以下のように最大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

このコマンドは、ファイル内のcut3番目に区切られたフィールド(次のファイル名)を選択し、同時に改行区切りのパスを読み取ります。:servernam:xargsrm

servernam:実際のパスの一部になるには、各行のスペースで区切られた最後のフィールドを抽出するコマンドを置き換えますcutawk '{ print $NF }'

このusingはパス名にスペースがないと仮定しcut、usingはパスにスペースがないと仮定します。:awk

関連情報