"xyz.abc.001.xxx.0.820"과 같은 문자열이 포함된 큰 파일이 있는데 전체 파일에서 이를 "0,820,xyz.abc.001.xxx"로 바꾸고 싶습니다.
예:
xyz.abc.001.xxx.0.820\ to 0,820,xyz.abc.001.xxx
xyz.abc.001.xxx.820.123\ to 820,123,xyz.abc.001.xxx
xyz.abc.001.xxx.1000.2000\ to 1000,2000,xyz.abc.001.xxx
xyz.abc.001.xxx.1.100\ to 1,100,xyz.abc.001.xxx
다음 sed 명령과 정규식을 사용하고 있지만 제대로 교체되지 않습니다
sed -E "s/(xyz.abc[0-9]\+\.xxx)\.([0-9]\+)\.([0-9]\+)\\/\2,\3,\1/g" file_name
이것이 가능합니까?
미리 감사드립니다.
답변1
시도 해봐
sed -E "s/(xyz.abc.*xxx).([0-9]+)\.([0-9]+)./\2,\3,\1/"
sed -E "s/(xyz.abc.*xxx).([0-9]+)\.([0-9]+)\\\\/\2,\3,\1/"
어디
- 모드 선택은 다음과 같이 이루어집니다.
\( ... \)
- 후행은 (모든 문자) 또는 (셸에서 탈출하고 sed에서 탈출)로
\
캡처할 수 있습니다 ..
\\\\
- 점을 지정하기 위해
.
또는 를 사용한다는 점에 유의하세요.\.
답변2
지금은 시도할 수 없지만, 나에게는 그다지 문제가 되지 않는 것 같습니다. \+
기준에 맞지 않으니 시도해 보세요.
sed -E "s/(xyz\.abc[0-9]{1,}\.xxx)\.([0-9]{1,})\.([0-9]{1,})\\/\2:\3,\1/g" file_name
답변3
필수 사항이 아닌 경우 다음을 기반으로 sed
다음 솔루션을 시도해 볼 수 있습니다 .awk
awk -F. -v OFS="." '{sub(/\\$/,"",$NF); printf("%s,%s,",$NF,$(NF-1)); NF=NF-2}1' input.txt
이는 각 줄을 .
- 구분된 필드로 해석하고, 뒤따르는 마지막 줄을 제거하고 \
, 출력 줄의 시작 부분에서 쉼표로 구분된 마지막 두 필드를 인쇄한 다음, 나머지 필드(다시 .
- 구분됨)를 인쇄합니다.