2017-12-20 19 views
0

도구을 파일에 삽입 백 슬래시를 "나오지도"텍스트 디렉토리에있는 각 파일의 상단에있는 "\ 중앙 연결"을 삽입하려고합니다.

코드는 :

for f in $DIR/*.sql; do 
    sed -i "1i \\\connect central" $f 
done 

이 내 텍스트를 인라인 편집 및 삽입하려고 않지만, (I 어디서나 읽을 것 같은) 내가 기대 것 같은 세 개의 백 슬래시는 하나의 백 슬래시를 만들지 않습니다.

enter image description here

가 나는 또한의 라인을 따라 약간의 변형을 시도했다 : 대신 내가 얻을

for f in $DIR/*.sql; do 
    sed -i -e "1i `\\\connect central`" $f 
done 

하지만 sed: -e expression #1, char 3: expected \ after에 '의 오류를 발생 c', i'`

답변

3

큰 따옴표 대신 작은 따옴표를 사용하십시오. 백 슬래시는 큰 따옴표 안에있는 이스케이프 문자이므로 두 번 사용하여 문자 그대로 sed 명령에 전달해야합니다. 작은 따옴표 안에는 특별한 의미가 없습니다.

sed -i '1i \\\connect central' "$f" 

가 (당신이 삽입하고있는 문자열에 변수 내용이 있다면 당신이해야 할 수도 있습니다) 따옴표로 작업을 수행하려면, 당신은 모든 백 슬래시 두 배로 있습니다 자세한 내용은

sed -i "1i \\\\\\connect central" "$f" 

을, Difference between single and double quotes in Bash

+0

더 자세히 설명하기 위해 첫 번째 백 슬래시는 sed'i' 명령에 필요합니다. 뒤에 나오는 백 슬래시는 백 슬래시 - 백 슬래시처럼 이스케이프 처리해야하므로 sed가 특별히 처리하지 않습니다. 따라서 세 개의 백 슬래시가 sed에 필요합니다. – John1024

+0

@ John1024 그것은 질문의 명령에 이미 내재되어 있습니다. 그는 올바른 'sed' 명령이 무엇인지 알고 있으며, 쉘에서 명령을 전달하는 데 문제가 있습니다. – Barmar

+0

그래, 그냥 올바른 구문을 얻을 수 없습니다 분명히, 따옴표는 루프에 나를 던졌다. 감사. – Daniel