찾아서 바꾸기

찾아서 바꾸기

키워드가 포함된 파일이 있습니다 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 }

실제로 입력하지 마세요.{그리고};그들은 단지 선을 긋기 위해 거기에 있는 것입니다.

관련 정보