정답은sed를 사용하여 후행 공백 제거이미 대부분의 답변이 있지만 저는
sed -i 's/[ \t]*$//' $1
glob 인수를 포함하여 명령줄에서 쉘 스크립트로 원하는 수의 파일 인수를 전달하는 기능. 즉, 스크립트가 이라고 가정해 보겠습니다 strip_trailing_whitespace
. 그런 다음 이 두 가지 작업을 모두 수행할 수 있기를 원합니다.
strip_trailing_whitespace foo.cc bar.cc
그리고
strip_trailing_whitespace *.cc *.hh
*.cc
sum 형식의 모든 파일에서 후행 공백을 제거합니다 *.hh
. 위에 인용된 답변을 기반으로 하지 않은 주장도 괜찮습니다.
답변1
$1
는위치 매개변수;스크립트에 전달된 첫 번째 인수로 확장됩니다. 유사한 것에는 $2
, $3
... $9
,,,, ${10}
... 이 포함됩니다.${11}
이것특수 매개변수 "$@"
목록으로 확장됩니다모두위치 매개변수.
따라서 다음을 수행할 수 있습니다.
sed -i 's/[ \t]*$//' "$@"
이 스크립트(또는 모든 프로그램)에 glob/패턴을 전달하려면 스크립트를 호출할 때 이스케이프하거나 인용해야 합니다. 이는 스크립트가 패턴을 보기 전에 확장되는 쉘의 기능입니다. 이 경우에는 이것이 필요하지 않습니다. 쉘은 패턴을 확장할 수 있으며 확장 결과는 모두 에 전달됩니다 sed
.
답변2
다음과 같이 xargs와 함께 sed를 사용하는 것이 쉽다는 것을 알았습니다.
find . -name "*.xml" | xargs sed -i 's/[ \t]*$//'
find . -type f | grep cc | xargs sed -i 's/[ \t]*$//'