"key = value" 줄: 특정 키의 값을 바꾸는 방법은 무엇입니까?

"key = value" 줄: 특정 키의 값을 바꾸는 방법은 무엇입니까?

파일에서 표현식의 오른쪽을 찾아 를 사용하고 싶습니다 sed. 이를 통해 grep우리는 다음을 봅니다.

$ grep power TheFile 
power                 = 1

또한 cut다음 값에 액세스할 수 있습니다.

$ grep power TheFile  | cut -d = -f 2
 1

sed그러나 해당 명령을 사용하여 파이프하는 방법을 모르겠습니다 . 이것을 달성하는 방법에 대한 아이디어가 있습니까?

답변1

어때요?

sed '/^power /s/=.*$/= your-replacement/' TheFile
  1. /^power /는 주소 지정자입니다. 이 경우 regex와 일치하는 행을 찾습니다 ^power.

  2. s정규식과 일치하는 대체 명령입니다. 즉 =, ..

  3. 파일 내용을 파이프할 필요는 없습니다. 파일 내용(또는 파일 목록)을 명령 인수로 지정할 수 있습니다. 뭔가를 에 파이프로 연결하고 싶거나 필요하다면 sed쉽습니다 | sed ... 그냥 입니다.

  4. 예를 들어 첫 번째 단어 바로 뒤의 공백이 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

관련 정보