여러 단어 변경을 사용하는 방법은 무엇입니까 sed
? 예를 들어, 내용이 다음과 같은 일반 텍스트 파일이 있습니다.
Var_A = 1
Var_B = 2
Var_C = 3
생성된 파일이 다음과 같도록 , 1
및 2
을 변경 하려면 어떻게 해야 합니까 ?3
AAA
BBB
CCC
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
하고 printf
using을 통해 생성된 새 값을 추가합니다 paste
.
사용 sed
(및 printf
및 paste
):
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
검색 부분을 원하는 변수로 수정한 후 교체할 수 있습니다.