모든 줄이 다음으로 시작하는 helo.lst라는 거대한 텍스트 파일이 있습니다.
#=GS N4TFW2_FUSC1/96-161 AC N4TFW21
N4TFW2_FUSC1
나는 이 부분 에만 관심이 있다 . 나머지 텍스트에서 이 부분을 추출하여 전체 텍스트 파일에 적용해야 합니다.
작동하는 다음 스크립트를 찾았지만 방법을 모르겠습니다.
cat helo.lst | sed 's/^#=GS\s\([A-Z0-9_]*\)\/.*/\1/1' > helo_id.lst
그 후에 무슨 일이 일어났는지 설명해줄 수 있는 사람 있나요?s/
예를 들어, 내가 아는 한 파일에서 with가 sed 's/Mark/Euro/g' de_currency.txt
나타나는 모든 항목을 변경합니다. Mark
하지만 내 예에서는 스크립트가 그보다 더 복잡해 보입니다.Euro
de_currency.txt
답변1
sed 구문에 따르면:
/원래/교체/1회
원본을 분해하다
^ 줄의 시작
#=검색할 GS 문자열
\s 공간
( ) \는 쉘에서 사용되는 것처럼 (에서 의미를 갖습니다. ()는 대체 부분에서 대체될 변수를 나타냅니다(그룹화).
[A-Z0-9_] []는 A~Z, 0~9, _ 등의 문자를 나타냅니다.
*는 0회 이상을 의미합니다.
\/ \는 쉘에서 의미를 얻기 때문에 "/"로 끝나는 문자열을 나타냅니다.
.* 줄이 끝날 때까지 다른 모든 것을 소비/일치합니다.
분해 대체
\1 원래 문자열의 첫 번째 문자열 정규식 일치(변수)(역참조 [그룹])
경고: 이것은 GNU sed 구문입니다. OS/X 또는 *BSD에서는 gsed를 사용해야 합니다.
고급 예제가 포함된 sed 기사 링크:
http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/