如何对文件每一行中的给定字符串执行命令?

如何对文件每一行中的给定字符串执行命令?

假设我已经创建了一个文件。该文件的创建来自命令的执行。文件的内容最多有 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

我如何通过管道/awk/无论这个文件,以便我可以获得第二个字符串,即“servernam:/vol/serverxxxx”,然后运行如下命令:

rm  servernam:/vol/server_xx_t1_01_228_04/mssql01/server_StorageSystemLevel100.lun

所以我想从文件中提取正确的字符串并将其作为命令的参数包含在内。请注意,我需要对所有 4 个不同的字符串执行相同的执行命令。一个脚本示例,或者更好的是来自命令行的脚本示例,将不胜感激。

答案1

ls $(awk '{print $3}' /path/to/your/file)

检查这是否按预期工作,然后替换lsrm

答案2

echo rm $(sed -n -e 's/[^A-Za-z0-9]/\\&/g' -e 's/LUN Path:  *//p')

第一个s命令在每个不是换行符、字母或数字的字符之前添加反斜杠。第二个命令LUN Path:从具有前缀的行中删除前缀,并仅打印出具有前缀的行。生成的字符串在 shell 中进行文件名扩展和分词;由于除换行符之外的所有有问题的字符都已被转义,因此正确的文件名将传递给命令。

答案3

cut -d: -f3 file | xargs rm

该命令将从文件中cut挑选第三个- 分隔字段( 后的文件名),同时该命令将读取这些换行符分隔的路径并将它们提供给。:servernam:xargsrm

如果您想servernam:成为实际路径的一部分,请替换将提取每行最后一个空格分隔字段cut的命令。awk '{ print $NF }'

此 using假定路径名中cut不存在空格,并且 using假定路径不包含空格。:awk

相关内容