패턴 일치 후 새 행 삽입

패턴 일치 후 새 행 삽입

다음과 같은 패턴이 포함된 파일이 있습니다.

abc.example.com def.example.com xyz.example.com

example.com다음과 같이 각각 다음 줄 에 출력이 나타나기를 원합니다 .

abc.example.com
def.example.com
xyz.example.com 

시도해 보았지만 원하는 결과를 얻지 못했습니다 grep -oP'(example.com$)'. 첫 번째 경우에는 결과 grep -oP'*.(example.com$)만 얻었고 , 각 결과는 새로운 줄에 표시되었습니다. example.com두 번째에는 오류가 발생합니다.quantifier does not follow a repeatable pattern

답변1

GNU와 함께:

$ sed -E 's/(\S+example\.com) /\1\n/g' file
abc.example.com
def.example.com
xyz.example.com

또는 사용분사:

printf '%s\n' $(< file)

(매칭에 관심이 없다면 example.com)

답변2

공백을 줄 바꿈으로 바꾸려는 것 같으므로 다음을 사용할 수 있습니다 tr.

$ tr ' ' '\n' <file
abc.example.com
def.example.com
xyz.example.com

또는 다음을 사용하여 sed:

$ sed -e 'y/ /\n/' file
abc.example.com
def.example.com
xyz.example.com

귀하의 시도와 관련하여 :

  • 첫 번째 항목 ( grep -oP'(example.com$)'옵션과 실제 표현식 사이의 공간 부족 -P으로 단순화될 수 있음 ) grep -o 'example.com$'은 줄 끝과 일치하는 텍스트를 추출해야 합니다. example.com그것이 바로 그 일입니다.

  • 두 번째 grep -oP'*.(example.com$)(첫 번째와 마찬가지로 option과 표현식 사이에 공백이 누락되고 -P닫는 작은따옴표도 누락되었으며 아마도 로 단순화됨 ) 표현식 시작 부분에 수정자를 사용해 grep -o -P '*.example.com$'보세요 . *이것은합법적인안에기초적인a가 리터럴 별표 문자와 일치하는 정규식( grep기본적으로 -P또는 없이 사용됨 -E)입니다 . *이는 PCRE(또는 확장 정규식)에서는 허용되지 않습니다. grep그래서 GNU는 이에 대해 정당하게 불평했습니다.

내 생각에 당신이 하려고 하는 것은

$ grep -o '[^ ]*\.example\.com\>' file
abc.example.com
def.example.com
xyz.example.com

이는 비표준(일반적으로 구현되는) -o옵션을 사용하여 공백이 아닌 문자로 시작하고 리터럴 문자열이 뒤따르고 .example.com마지막으로 m"단어"로 끝나는 모든 하위 문자열을 추출합니다.

관련 정보