다음 코드가 무엇을 의미하는지 알 수 있나요?
sed 's/ \([0-9]\)\/\([0-9]\) / \2\/\1 /' filename
감사해요
답변1
sed 's/ \([0-9]\)\/\([0-9]\) / \2\/\1 /' filename
이는 대부분의 Unix 셸에서 유효한 코드입니다.
쉘에서 공백 문자는 구문에서 토큰을 구분하는 데 사용 '...'
되며인용하다/탈출하다쉘에 대한 문자열 의미문자의 특별한 의미 제거. 이 경우 이는 '...'
쉘이 공백 및 백슬래시 문자를 특별히 처리하지 않음을 의미합니다.
첫 번째 단어 sed
is는 쉘 구문의 키워드가 아니며 쉘은 해당 행을 간단한 명령 호출로 해석합니다. , 및 를 인수로 사용하여 find sed
명령을 분기 $PATH
하고 하위 프로세스에서 찾은 첫 번째 명령을 실행합니다.sed
s/ \([0-9]\)\/\([0-9]\) / \2\/\1 /
filename
sed
그것은 그 자체로 다른 언어, 언어의 통역사입니다 sed
.
-e
또는 옵션을 통해 스크립트가 전달되지 않는 한 -f
수신된 옵션이 아닌 첫 번째 인수는 sed
해석될 스크립트로 처리됩니다.
여기있어 s/ \([0-9]\)\/\([0-9]\) / \2\/\1 /
.
sed
filename
입력(여기서는 파일)을 한 번에 한 줄씩 처리하고(현재 줄이 로드되는 패턴 공간에서 sed
) 각 줄에 대해 제공된 스크립트의 코드를 해석하고 결과 패턴 공간을 stdout에 인쇄합니다.
여기서 스크립트는 단 하나의 명령 sed
인 s
ubstitute 명령으로 구성됩니다.
구문은 s%pattern%replacement%flags
모든 문자를 대신 사용할 수 있다는 것 입니다 %
.
여기서 저자는 를 대신 /
사용합니다 %
. 이것은 가장 일반적으로 사용되지만 여기서는 /
패턴 및 대체에 사용되므로 를 사용하여 이스케이프해야 하기 때문에 잘못된 선택입니다 \
.
따라서 패턴은 입니다 " \([0-9]\)/\([0-9]\) "
.sed
기본 정규식(갈아 바수다). 브레이에서:
- SPC,
/
특별하지 않으니까 맞춰보세요 [set]
일치하다요소 구성지정된 컬렉션에 있습니다. 세트에 포함된 경우x-y
및 사이에 정렬된 대조 요소와 일치합니다. 예를 들어 0123456789자 이상을 포함해야 하지만 로케일, 운영 체제 및 구현에 따라 더 많을 수도 있습니다.x
y
0-9
sed
\(...\)
그룹화에도 사용됩니다.포착. 즉, 내부 내용과 일치하는 내용은캡처됩니다그리고 제공되는대안\1
첫 번째 캡처 그룹,\2
두 번째 캡처 그룹 등입니다 .
여기서 대체할 항목은 패턴 일치의 처음 2개 캡처 그룹이 " \2/\1 "
어디에 있고 무엇 \2
인지 입니다.\1
g
귀하의 경우 특히 (로컬용 ) 플래그가 제공되지 않았기 때문에 플래그 목록이 비어 있으므로 g
한 줄에 첫 번째 일치 항목만 대체됩니다.
<SPC><a-digit><slash><another-digit><SPC>
따라서 여기서는 <SPC><another-digit><slash><a-digit><SPC>
각 줄에서 최대 하나씩 교체 filename
하고 결과를 표준 출력에 인쇄한다는 의미입니다.
예를 들어, a에는 다음이 filename
포함됩니다.
a 1/2 b 3/4
test
c4/5 6/7 d
다음과 같이 출력됩니다.
a 2/1 b 3/4
test
c4/5 7/6 d
¹ 예외에는 백슬래시 및 개행 문자는 물론 sed
멀티바이트 문자의 여러 구현이 포함됩니다. 또한 비ASCII 문자를 피해야 하며, 비ASCII 문자를 포함하기 위해 패턴이나 대체가 필요한 경우, 즉 인코딩된 문자를 다른 문자 중에서 찾을 수 없는 경우 !"#$%&' ()*+,-./:;<=>?
실제로는 ASCII 제어 문자도 제외하는 경우에만 남게 됩니다.