쉘 스크립트에서 패턴 일치 앞에 단어 하나만 제거

쉘 스크립트에서 패턴 일치 앞에 단어 하나만 제거

입력하다:

 int foo(int a, void * b, int c);

산출:

 int foo(int, void *, int);

일치시킬 패턴으로 ","를 사용하고 싶습니다. "," 패턴이 일치하면 이전 단어(예 a: b& ) 를 삭제합니다 c.

답변1

당신이 사용할 수있는시야(때때로 불린다.길이가 0인 주장) 사용 중인 정규식 엔진이 이를 지원하는 경우(예: Perl 사용) 뒤에 다음이 있는 경우에만 0이 아닌 단어 문자 시퀀스를 일치시키고 제거합니다.,

perl -pe 's/\w+(?=,)//g'

종료 닫는 괄호와 같이 어설션에 다른 문자를 포함하려면 해당 문자를 문자 목록의 일부로 추가할 수 있습니다 ).int c[...]

perl -pe 's/\w+(?=[,)])//g'

선행 공백도 제거하려면 다음을 시도하십시오.

perl -pe 's/\s*\w+(?=[,)])//g'

그것들을 합치면 우리는 얻는다.

$ echo 'int foo(int a, void * b, int c);' | perl -pe 's/\s*\w+(?=[,)])//g'
int foo(int, void *, int);

-i최신 버전의 sed와 마찬가지로 Perl도 명령줄 스위치를 추가하여 파일을 작동하도록 만들 수 있습니다.

답변2

이것이 도움이 될 것입니다: sed -e 's/[^ ]\+\([,)]\)/\1/g' 이 보기 흉한 공간을 제거하려면: sed -e 's/ [^ ]\+\([,)]\)/\1/g'

관련 정보