
키워드가 포함된 파일이 있습니다 RESOURCE
. 다음과 같이 파일의 어느 곳에서나 발생할 수 있습니다.
[email protected]
이제 [email protected]
.[email protected]
키워드를 찾을 수 있는 줄을 검색한 RESOURCE
다음 등호 뒤의 단어를 바꿔야 합니다. 키워드 RESOURCE
는 수정되지 않은 상태로 유지되어야 합니다.
누군가 이것에 대해 나를 도와 줄 수 있습니까?
입력:
[email protected]
산출:
[email protected]
답변1
grep
이 경우에는 파일 내용을 수정할 수 없으므로 유용하지 않습니다.
대신 sed
다음과 같이 사용할 수 있습니다.
fromaddr='[email protected]'
toaddr='[email protected]'
sed '/^RESOURCE=/s/='"$fromaddr"'$/='"$toaddr"'/' file >newfile
file
다음 과 같이 주어진다
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
이것은 newfile
다음과 같이 생성됩니다
some data
[email protected]
[email protected]
[email protected]
[email protected]
more data
표현식 sed
은 문자열로 시작하는 행을 선택합니다 RESOURCE
. 각 줄에 대해 이메일 주소가 있는 경우 해당 줄을 대체합니다. 대체에 사용되는 패턴은 일치하는지 확인 =
하고 주소가 줄 끝에서 끝나는지 확인합니다.
답변2
명령 sed
이 더 좋습니다.
sed -i 's/[email protected]/[email protected]/' yourfile
위의 내용은 내 테스트에서 작동하지만 직접 테스트하려면 먼저 다음을 시도해 볼 수 있습니다.
sed 's/[email protected]/[email protected]/' yourfile
그러면 파일에 영향을 주지 않고 변경 사항이 표준 출력에 기록됩니다.
어느 쪽이든 원하는 변경 사항을 제공합니다.
[email protected]
파일의 값이 RESOURCE
다르고 다른 값으로 변경하려면 다음을 수행하십시오.
grep RESOURCE= yourfile
그러면 해당 행이 반환되고 값이 표시됩니다.
그런 다음 사용할 수 있습니다
sed 's/[email protected]/[email protected]/' yourfile
나중에 참고할 수 있도록 이 모든 리가마롤 없이도 필요한 도움을 얻을 수 있도록 원래 질문에서 이 모든 것을 명확하게 하는 것이 중요합니다.
답변3
뒤에 나오는 문자열을 바꾸고 싶다고 말하는 것 같습니다 =
.
그것이 무엇이든 간에—
예를 들어,샘플 데이터에서 [email protected]
. 그러나 당신은 뒤에 오는 문자열이 무엇이든 =
그것을 대체하고 싶다고 말하고 있습니다 [email protected]
. 분명히 당신은 그것을 하드코딩하기를 원합니다.
이를 수행하는 방법에는 몇 가지 변형이 있습니다. 가장 간단한 것은
sed 's/RESOURCE=.*/[email protected]/'
(아래의 모든 명령과 마찬가지로) .*
"무엇이든 거기에 있는 것과 일치한다"는 의미를 사용합니다. 두 번 입력하고 싶지 않다면 RESOURCE=
위의 내용을 다음과 같이 단축할 수 있습니다.
sed 's/\(RESOURCE=\).*/\[email protected]/'
여기서 \(
...는 \)
검색 문자열의 일부를 그룹으로 표시하고(최대 9개의 그룹이 있을 수 있음) \1
첫 번째 그룹으로 대체한다는 의미입니다.
RESOURCE=
위의 명령은 줄에 나타나는 모든 위치를 찾아서 바꿉니다 . 예를 들어 입력은
# Lakshminarayana wants to change all occurrences of "RESOURCE=".
[email protected]
[email protected]
[email protected]
FOX RESOURCE=The quick brown fox
# Comment: Originally line 2 said [email protected]
로 변경됩니다
# Lakshminarayana wants to change all occurrences of "[email protected]
[email protected]
[email protected]
[email protected]
FOX [email protected]
# Comment: Originally line 2 said [email protected]
RESOURCE=
줄의 시작 부분에 나타날 때만 일치시키려면 다음을 사용하십시오.^
:
sed 's/^RESOURCE=.*/[email protected]/'
또는
sed 's/^\(RESOURCE=\).*/\[email protected]/'
줄의 나머지 부분 전체가 아닌 리소스 값만 바꾸려는 경우 — 예:
[email protected] [email protected]
에게
[email protected] [email protected]
그것도 할 수 있습니다. 완전하고 명확한 설명과 함께 원하는 내용을 정확히 말하도록 질문을 편집하세요.그리고예.
알겠습니다. 위 중 하나를 선택하세요s
명령. 이제 (지시한 대로) 파일을 제자리에서 편집하려면 다음을 수행하십시오.
sed -i { s command } { yourfile }
새 파일을 생성하려면 다음을 수행하십시오.
sed { s command } { oldfile } > { newfile }
실제로 입력하지 마세요.{
그리고}
; 그들은 단지 경계를 위해 존재합니다.