sed _1은 _10 _11은 아닙니다.

sed _1은 _10 _11은 아닙니다.

내 데이터 구조는 다음과 같으며 두 개의 열로 나뉩니다.

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

관련 정보