파일의 각 줄에 있는 특정 문자열에 대해 명령을 실행하는 방법은 무엇입니까?

파일의 각 줄에 있는 특정 문자열에 대해 명령을 실행하는 방법은 무엇입니까?

파일을 생성했다고 가정해 보겠습니다. 파일은 명령 실행으로 생성됩니다. 파일 내용은 아래와 같이 최대 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"라는 두 번째 문자열을 가져온 다음 다음과 같은 명령을 실행할 수 있도록 /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명령은 개행, 문자 또는 숫자가 아닌 각 문자 앞에 백슬래시를 추가합니다. 두 번째 명령은 LUN Path:접두사가 있는 줄에서 접두사를 제거하고 접두사가 있는 줄만 인쇄합니다. 결과 문자열은 파일 이름으로 확장되고 셸에서 토큰화됩니다. 줄 바꿈을 제외한 문제가 있는 모든 문자가 이스케이프되었으므로 올바른 파일 이름이 명령에 전달됩니다.

답변3

cut -d: -f3 file | xargs rm

이 명령은 file 에서 cut세 번째로 구분된 필드(다음의 파일 이름)를 선택하는 동시에 줄 바꿈으로 구분된 경로를 읽어 에 제공합니다.:servernam:xargsrm

servernam:실제 경로의 일부가 되려면 각 줄의 공백으로 구분된 마지막 필드를 추출하는 명령을 바꾸 십시오 cut.awk '{ print $NF }'

이 using은 경로 이름에 공백이 없다고 가정 cut하고 using은 경로에 공백이 없다고 가정합니다.:awk

관련 정보