파일에서 표현식의 오른쪽을 찾아 를 사용하고 싶습니다 sed
. 이를 통해 grep
우리는 다음을 봅니다.
$ grep power TheFile
power = 1
또한 cut
다음 값에 액세스할 수 있습니다.
$ grep power TheFile | cut -d = -f 2
1
sed
그러나 해당 명령을 사용하여 파이프하는 방법을 모르겠습니다 . 이것을 달성하는 방법에 대한 아이디어가 있습니까?
답변1
어때요?
sed '/^power /s/=.*$/= your-replacement/' TheFile
/^power /
는 주소 지정자입니다. 이 경우 regex와 일치하는 행을 찾습니다^power
.s
정규식과 일치하는 대체 명령입니다. 즉=
, ..파일 내용을 파이프할 필요는 없습니다. 파일 내용(또는 파일 목록)을 명령 인수로 지정할 수 있습니다. 뭔가를 에 파이프로 연결하고 싶거나 필요하다면
sed
쉽습니다| sed ..
. 그냥 입니다.예를 들어 첫 번째 단어 바로 뒤의 공백이
power
탭일 수 있는 경우 대신 해당 공백을 사용하세요[[:blank:]]
. 일부 버전에서는 명시적인 탭 문자를sed
사용할 수 있습니다 .\t
답변2
TheFile
단어로 시작 하고 뒤에 일정한 양의 공백과 등호가 오는 줄을 찾고 power
등호 뒤에 오는 내용을 다음으로 바꾸려면 something
:
sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile
[[:blank:]]*
0개 이상의 공백이나 탭과 일치합니다. 이렇게 하면 전후의 공백이 유지됩니다 =
. 대체 텍스트는 \1
첫 번째 대괄호와 일치하는 문자열 부분을 삽입합니다.
GNU 등을 사용하여 변경하려면 sed
이 -i
플래그를 추가하고, 그렇지 않으면 출력을 새 파일로 리디렉션합니다.
테스트해보세요:
$ cat TheFile
power = 1
power123 = 1
power 123 = 1
power =
power = 112
$ sed -E 's/^(power[[:blank:]]*=[[:blank:]]*).*/\1something/' TheFile
power = something
power123 = 1
power 123 = 1
power =something
power = something