sed를 사용하여 파일의 단어를 제어 문자로 바꾸는 방법

sed를 사용하여 파일의 단어를 제어 문자로 바꾸는 방법

파일의 해당 단어를 제어 문자로 전역적으로 바꾸는 방법. 어떻게 해야 하나요? 나는 성공하지 않고 다음을 시도했습니다.

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.

관련 정보