기호(줄의 마지막 문자) 앞에 내용을 인쇄하는 명령

기호(줄의 마지막 문자) 앞에 내용을 인쇄하는 명령

3개의 파일이 있다고 가정해 보겠습니다.

abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip

마지막 밑줄(_) 이전의 문자만 인쇄하고 싶습니다.

예상되는 출력은 다음과 같습니다.

abc_def
abc
abc_def_ghi

답변1

매개변수 확장과 함께 bash를 사용할 수 있습니다.

$ foo="abc_def_ghi_3432.zip"; echo "${foo%_*}"
$ abc_def_ghi

답변2

sed를 사용하면 시도해 볼 수 있습니다

sed -E 's/(.*)_.*/\1/'

예를 들어 이것을 복사하여 명령 프롬프트에 붙여넣으세요.

% cat << EOF | sed -E 's/(.*)_.*/\1/'
abc_def_12345.zip
abc_123.zip
abc_def_ghi_3432.zip
EOF

산출

abc_def
abc
abc_def_ghi

이 명령은 sed의 패턴 공간 자동 인쇄를 그대로 유지합니다. 이는 패턴과 일치하지 않는(즉, _'를 포함하지 않는) 다른 줄이 출력의 일부가 된다는 것을 의미합니다. 그렇지 않으면 이것을 원하면 사용할 수 있습니다

sed -n -E 's/(.*)_.*/\1/p'

관련 정보