여러 줄의 XML이 포함된 파일이 있습니다. 파일의 일부를 교체하고 싶습니다. 파일의 일부 부분에 "
바꾸고 싶은 따옴표( )가 포함되어 있습니다. 나는 노력해왔다탈출하다quote \
이지만 내 파일 결과에 따르면 이것이 작동하지 않는 것 같습니다.
다음은 내 sed 명령 중 하나의 예입니다.
sed -e "s/\"text\"/'text'/ig" file.xml > temp.tmp
이것이 sed 명령에서 따옴표를 피하는 방법입니까, 아니면 제가 뭔가 잘못하고 있는 것입니까?
답변1
두 가지 팁:
작은따옴표로 묶인 문자열에서는 작은따옴표를 이스케이프할 수 없습니다. 따라서 인용문을 닫고 이스케이프된 인용문을 추가한 다음 인용문을 다시 열어야 합니다. 즉,
'foo'\''bar'
, 다음과 같이 분해됩니다.'foo'
선두foo
\'
탈출하다'
'bar'
선두bar
생산하다
foo'bar
./
(선택 사항) 반드시 sed에서 사용할 필요는 없습니다 . 동일한 sed 표현식에서/
and 를 사용하면\
읽기가 어렵다는 것을 알았습니다.
예를 들어, 이 파일에서 따옴표를 제거하려면 다음을 수행하십시오.
$ cat /tmp/f
aaa"bbb"'ccc'aaa
위의 두 가지 팁을 고려하면 큰따옴표와 작은따옴표를 제거하는 데 사용할 수 있는 명령은 다음과 같습니다.
$ sed -e 's|["'\'']||g' /tmp/f
첫 번째 팁에 따르면 쉘은 sed의 두 번째 인수(뒤에 오는 문자열 -e
)를 로 줄여 s|["']||g
해당 문자열을 sed에 전달합니다. 두 번째 팁에 따르면 sed는 이를 s/['"]//g
.
'
or와 일치하는 모든 문자를 제거합니다"
(즉, null로 대체).
원하는 것을 달성하려면 이보다 더 복잡한 것이 필요할 수도 있지만 시작에 불과합니다.
답변2
Unix 유틸리티의 Windows 포트가 있으므로 명령이 약간 다르게 보이지만 쉼표와 따옴표가 있는 csv 파일이 있습니다. 이 스레드를 가이드로 사용하여 다음을 사용하여 따옴표를 제거할 수 있었습니다.
c:\Temp> cat report.csv | sed "s/\,/\ /g" | sed "s/[""]//g"