
다음 내용이 포함된 파일이 있습니다.
[root@server list]# cat filenames.txt
[AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB]
[root@qa4app01 list]#
나는 이것을 내 Python 스크립트에서 사용할 목록으로 사용하고 싶기 때문에 and AAA'
로 변경 하려고 하며 with 및 with를 사용 하고 대체할 것이라고 생각했습니다 .'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
sed의 오른쪽 대괄호와 작은따옴표를 왼쪽 대괄호로 바꾸고 다음을 시도해야 합니다.
[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']
또는 &
"방금 일치한 항목"을 의미하는 사용:
$ sed "s/^./&'/;s/.$/'&/" file
['AAA','ACMEDEMO2','ACMEDEMO3','ACMEDEMO4','RENTCOGH','TESTENT','DORASINE','LOKAWINK','BBB']