sed/bash는 왼쪽과 오른쪽 대괄호를 다르게 처리합니다.

sed/bash는 왼쪽과 오른쪽 대괄호를 다르게 처리합니다.

다음 내용이 포함된 파일이 있습니다.

[root@server list]# cat filenames.txt
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB]
[root@qa4app01 list]#

저는 이것을 Python 스크립트의 목록으로 사용하고 싶어서 and AAA'로 변경해 보았고 and 를 and 로 대체할 것이라고 생각했습니다 .'AAA''BBB'BBB'sed[[']']

확인하기 위해 다음을 시도했습니다.

[root@server list]# cat filenames.txt | sed "s/]/']/g"
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB']
[root@server list]#

]작동 했고 '].AAA

[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/[/['/g"
sed: -e expression #2, char 8: unterminated `s' command
[root@server list]#

좋아요 어떤 이유로 추가 sed명령이 제대로 작동하지 않는 것 같습니다. 이를 확인하기 위해 sed왼쪽 대괄호를 별도로 시도했습니다.

[root@server list]# cat filenames.txt | sed  "s/[/['/g"
sed: -e expression #1, char 8: unterminated `s' command
[root@server list]#

이상한. sed여는 괄호와 대괄호가 다르게 취급되는 것 같습니다 . 도망치지 않고 도망갈 수 있고 [, 도망치지 않고 거절할 수 있는 캐릭터 sed. ]나는 다음과 같이 왼쪽 대괄호에 이스케이프 문자를 추가하여 원하는 것을 얻었습니다.

[root@server list]# cat filenames.txt | sed -e "s/]/']/g" -e "s/\[/\['/g" ['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','MENSCOGH','TESTENT','DORASINE','LOKAWINK','BBB'] [root@server list]#

저는 대괄호 인스턴스가 많은 파일을 처리하는 Python + 쉘 스크립트를 작성 중입니다. 내 질문은 sed왼쪽 및 오른쪽 대괄호를 다르게 처리하는지 여부입니다 bash.

sed 버전은 GNU sed 버전 4.2.1입니다.

추신: 나는 안전을 위해 대괄호 안에 이스케이프 문자를 사용하기로 결정했지만, 내가 가고 있는 곳에서 이스케이프 문자를 사용하지 않으면 스크립트가 손상되지 않는다는 것을 절대적으로 확신하기 위해(가독성 이유로) 오른쪽 대괄호만 사용]

답변1

[소개했다캐릭터 클래스닫으 ]세요.

sed가 그 내용만 본다면 ](즉, 명령을 닫으면) 괜찮습니다. sed는 이것이 특별한 명령이 아니라고 가정합니다.

[닫지 않고 사용하는 것만으로는 ]혼란스럽기 sed때문에 이스케이프해야 합니다.

그런데 그럴 필요는 없다.

  • g(전역) 플래그(한 줄에 하나만 교체)
  • [대체 탈출.

나는 당신의 변경 사항을 관리합니다

sed -e "s/]/']/" -e "s/\[/['/" 

답변2

Archemar는 이것이 실패하는 이유를 설명합니다 [. 여기에 이 ​​특정 교체를 수행하는 또 다른 방법이 있습니다.

$ sed "s/^./['/;s/.$/']/" file
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB']

또는 &which를 사용하여 "방금 일치한 항목"을 의미합니다.

$ sed "s/^./&'/;s/.$/'&/" file
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB']

관련 정보