특정 문자 뒤의 문자열 뒤를 찾아 바꾸기

특정 문자 뒤의 문자열 뒤를 찾아 바꾸기

입력 파일에 다음 줄이 있고 "=" 기호 뒤의 모든 텍스트를 새 문자열(예: "good")로 바꾸고 싶습니다.

다시 말하지만, 행 내의 특정 문자열에 대해서만 이 작업을 수행하고 싶습니다.

입력 파일:

$myvar1=var1
$myvar2=var2
$myname=name
$myage=age
$mycity=city

결과물 파일:

$myvar1=var1
$myvar2=var2
$myname=good
$myage=good
$mycity=good

답변1

나는 sed가 당신이 원하는 일에 적합한 도구라고 생각합니다. 여기에 제가 구현한 내용이 있습니다. 나는 무언가를 찾고 있는 것이 아니라 당신이 보호하고 있는 것을 부정하는 것입니다.

sed -r '/^((\$myvar1)|(\$myvar2))/!s/=.*$/="good"/g'

답변2

처음 두 줄을 건너뛰려면 다음을 사용할 수 있습니다.

sed '3,$s/=.*/=good/' file

그러면 3행부터 마지막 ​​행( )까지 $교체가 수행됩니다.

답변3

이것이 당신이 원하는 것입니까? GNU sed를 사용하세요.

sed -E '/var[0-9]/!s/(=).*/\1good/' file

답변4

$myname변경하려는 변수 이름(예: , 및 ) 을 미리 알고 있다고 가정하면 다음을 $myage사용할 수 있습니다.$mycitysed

sed -i '/^\$myname=/s/=.*$/=good/g' input_file_name
sed -i '/^\$myage=/s/=.*$/=good/g' input_file_name
sed -i '/^\$mycity/s/=.*$/=good/g' input_file_name

기본적으로 이는 특정 일치 항목( ^\$myname=, ^\$myage=또는 ^\$mycity=)으로 시작하는 줄에서만 정규식을 실행하고 =.*$등호 뒤에 오는 모든 항목을 등호 및 해당 문자열( =good)로 바꾸라는 의미입니다.

-i참고: 해당 버전에서 이 옵션을 사용할 수 없는 경우 sed동일한 효과를 얻으려면 다음 방법을 고려하십시오.

sed '/^\$myname=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$myage=/s/=.*$/=good/g' input_file_name > output_file_name
sed '/^\$mycity/s/=.*$/=good/g' input_file_name > output_file_name

관련 정보