파일의 해당 단어를 제어 문자로 전역적으로 바꾸는 방법. 어떻게 해야 하나요? 나는 성공하지 않고 다음을 시도했습니다.
Replace "^Aabc_def_a^B" with "^Adef_a^B" globally
다음을 시도했습니다.
sed -i 's/^Aabc_def_a^B/^Adef_a^B/g' file.txt
sed -i 's/\^Aabc_def_a\^B/\^Adef_a\^B/g'file.txt
sed 's/x01abc_def_ax02/x01def_ax02/g'
답변1
나를 위해 일하는 것 같습니다 :
$ echo -n "^Aword^B" | sed 's/^Aword^B/^Alexical unit^B/' | hexdump -C
00000000 01 6c 65 78 69 63 61 6c 20 75 6e 69 74 02 0a |.lexical unit..|
0000000f
01
대표 하다 ^A
;02
^B
캐럿( ^
) 다음에 A
또는 가 아닌 리터럴 제어 문자를 사용하고 있다는 점을 기억하세요 B
. sed
작성된 대로 명령을 입력 하려면 Ctrl- V다음에 제어 문자를 사용하여 입력으로 구문 분석하는 대신 문자 그대로 삽입하십시오 readline
.
즉, 을 삽입하려면 -를 ^A
누른 다음 -를 누르면 입력 내용이 표시됩니다 . 이 옵션 위로 화살표를 가져가면 화면에 두 문자로 구성되어 있더라도 커서가 항상 이 옵션을 단일 단위로 처리하는 것을 볼 수 있습니다.CtrlVCtrlA^A
답변2
GNU sed에서는 다음과 같이 작동합니다.\xHH
$ printf '\001foo\002\n' | sed 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
GNU sed는 없지만 Bash가 있는 경우 $''
따옴표를 사용하여 셸에서 제어 문자를 생성할 수 있습니다.
$ printf '\001foo\002\n' | sed $'s/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
둘 다 없다면 Perl은 항상 다음을 이해합니다.\xHH
$ printf '\001foo\002\n' | perl -pe 's/\x01foo\x02/\x01bar\x02/g' | od -c
0000000 001 b a r 002 \n
물론 에서도 같은 작업을 수행할 수 있습니다 -i
.