입력 파일에 다음 줄이 있고 "=" 기호 뒤의 모든 텍스트를 새 문자열(예: "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
사용할 수 있습니다.$mycity
sed
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