내 데이터 구조는 다음과 같으며 두 개의 열로 나뉩니다.
ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11
시도해 보았지만 sed /s/_1//g file_name
역시 _10
바뀌었습니다 _11
.
_1
변경하지 않고 어떻게 _10
대체하거나 아무것도 포함하지 않을 수 있습니까 _11
?
답변1
정규식을 바꿔보세요! 필요한 것을 일치시키고 앵커 포인트를 추가하여 선택을 제한하세요.
데이터를 어디서 읽는지는 말하지 않았습니다. 파일 목록인가요? set -- *
에 의해 설정된 위치 인수 로 ? 배열? 각 이름에 대해 한 줄로 구성된 파일입니다. 밧줄?
_1
파일에 공백으로 구분된 두 개의 열이 있다고 가정하고, 단어 끝에 a가 포함된 모든 단어를 변경하려고 한다고 가정합니다.또는줄 끝. 그런 다음 을 사용하십시오 _1([ ]|$)
. 이는 _1
뒤에 공백이 있거나 줄 끝에 있으면 일치함을 의미합니다.
$ cat infile
ABC_1 ABC_1
XYZ_1 XYZ_1
ABC_10 ABC_10
XYZ_11 XYZ_11
$ sed -E 's/_1([ ]|$)/\1/g' infile # non-POSIX sed because of `-E`.
ABC ABC
XYZ XYZ
ABC_10 ABC_10
XYZ_11 XYZ_11