여러 단어를 다른 단어로 바꾸려면 "sed"를 사용하세요.

여러 단어를 다른 단어로 바꾸려면 "sed"를 사용하세요.

여러 단어 변경을 사용하는 방법은 무엇입니까 sed? 예를 들어, 내용이 다음과 같은 일반 텍스트 파일이 있습니다.

Var_A = 1
Var_B = 2
Var_C = 3

생성된 파일이 다음과 같도록 , 12을 변경 하려면 어떻게 해야 합니까 ?3AAABBBCCC

Var_A = AAA
Var_B = BBB
Var_C = CCC

나는 이것을 사용해 보았습니다.

sed -i 's/Var_A = 1\nVar_B = 2\nVar_C = 3/Var_A = AAA\nVar_B = BBB\nVar_C = CCC' file.txt

하지만 전혀 작동하지 않습니다.

답변1

sed대체 텍스트를 사용하는 방법에 대한 기본 테스트 사례를 찾고 있는 것 같습니다 . 귀하의 경우에는 다음 명령을 사용하는 것이 좋습니다.

sed -e '/^Var_A/s/1/AAA/' -e '/^Var_B/s/2/BBB/' -e '/^Var_B/s/3/CCC/' file.txt

이는 세 개의 "대상" 대체 명령을 적용하여 행이 로 시작하는지 확인하고 Var_A, 그렇다면 로 대체합니다 1( AAA등).

답변2

다음과 같은 것을 찾고 있는지 살펴보겠습니다.

# define the replacement variables
$ a='AAA';b='BBB';c='CCC'
# make each replacement using the variables.
$ sed -e "s/^\(Var_A = \).*$/\1$a/" -e "s/^\(Var_B = \).*$/\1$b/" -e "s/^\(Var_C = \).*$/\1$c/" foo.txt 
Var_A = AAA
Var_B = BBB
Var_C = CCC

목적 sed은 텍스트를 한 줄씩 처리하는 것이므로 새 줄을 일치시키려고 시도하는 것은 일반적이지 않거나 적어도 좋은 생각입니다.

답변3

그것이 무엇인지 알아내려고 노력하지 말고 문자 그대로 질문을 받아들이십시오.실제로발생하다:

$ cut -d ' ' -f -2 file | paste -d ' ' - <( printf '%s\n' AAA BBB CCC )
Var_A = AAA
Var_B = BBB
Var_C = CCC

이렇게 하면 원본 파일에서 using 기호 뒤의 값을 삭제 cut하고 printfusing을 통해 생성된 새 값을 추가합니다 paste.


사용 sed(및 printfpaste):

printf '%s\n' AAA BBB CCC | paste -d @ file - | sed 's/\(= \).*@/\1/'

이렇게 하면 완전한 원본 파일과 새 데이터가 생성되어 @아래와 같이 두 개의 데이터 세트가 문자로 구분되어 나란히 표시됩니다.

Var_A = 1@AAA
Var_B = 2@BBB
Var_C = 3@CCC

sed그런 다음 각 줄 사이 =@모든 내용을 바꾸는 데 사용됩니다 =.

답변4

배열을 사용하려면 다음 솔루션을 사용할 수 있습니다.

$ v=([1]=AAA BBB CCC)
$ cat <<. | sed -e "s/1/${v[1]}/
> s/2/${v[2]}/
> s/3/${v[3]}/"
> Var_A = 1
> Var_B = 2
> Var_C = 3
> .
Var_A = AAA
Var_B = BBB
Var_C = CCC

검색 부분을 원하는 변수로 수정한 후 교체할 수 있습니다.

관련 정보