파일의 한 줄에 있는 문자 검색 및 바꾸기

파일의 한 줄에 있는 문자 검색 및 바꾸기

내 Linux 컴퓨터에 파일이 있습니다.

1234 | 456 |"abc | xyz"|  fid|

|그 사이에 있는 which를 쉼표로 바꾸고 싶습니다 . " "abc와 xyz 사이에는 파이프만 있습니다. 이 줄은 유사한 줄을 포함하는 파일의 일부이지만 "" 안에는 하나만 있을 수 있습니다. 누구든지 도와줄 수 있나요?

답변1

echo '1234 | 456 |"abc | xyz"| fid|' | \
sed 's/\([^|]*|[^|]*|[^|]*\)|/\1,/'

이것을 생산합니다.

1234 | 456 |"abc , xyz"| fid|

이 sed 라인은 파이프가 아닌 것, 파이프, 파이프가 아닌 더 많은 것, 파이프, 파이프가 아닌 더 많은 것을 찾는 방식으로 작동합니다.이것역참조에서 제외된 관심 파이프입니다. 모든 것을 역참조로 바꾼 다음 끝에 있는 파이프를 쉼표로 바꿉니다. 나머지 줄은 변경되지 않습니다.

답변2

나는 terdon 문제에 대한 답과 설명을 다음과 같이 얻었습니다.


echo '1234 | 456 |"abc | xyz"|  fid|' | sed "s:|:,:3"

답변3

|각 줄 사이의 따옴표를 바꾸려고 한다고 가정하면 다음과 같이 작동합니다.

sed 's/"\([^"]*\)|\([^"]*\)"/"\1,\2"/' yourfile

관련 정보