RESOURCE 키워드가있는 파일이 있습니다. 다음과 같이 파일의 모든 위치에서 발생할 수 있습니다.

[email protected] 

이제 [email protected]

. RESOURCE 키워드를 찾을 수있는 줄을 검색 한 다음 등호 뒤의 단어를 바꿔야합니다. RESOURCE 키워드는 수정되지 않은 상태로 유지되어야합니다.

어떤 사람이이 문제를 도와 줄 수 있습니까?

input :

[email protected] 

출력 :

[email protected] 

Answer

grep는 파일 내용을 수정할 수 없기 때문에이 경우 유용하지 않습니다.

대신

예 :

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 문자열로 시작하는 줄을 선택합니다. 이러한 각 줄에 대해 이메일 주소가 줄에있는 경우이를 대체합니다. 대체에 사용 된 패턴은 =와 일치하고 주소가 끝나는 지 확인합니다. 줄 끝에.

코멘트

  • [email protected]을 하드 코딩하고 싶지 않습니다. nasir37 @ yahoo와 같은 형식이어야합니다. .com. [email protected]과 같은 다른 이름으로 바꾸고 싶습니다. 동적이어야합니다 – Lakshminarayana 방금 수정
  • @Lakshminarayana 업데이트 된 답변보기
  • 원하지 않습니다. 파일이 다른 데이터로 구성되어 있기 때문에 다시 새 파일에 씁니다. 다음과 같습니다.
  • @Lakshminarayana 그런 다음 sed -i로 실행합니다. ' 올바른 작업을 수행하고 있으며 ' 새 파일로 리디렉션하지 않습니다. ' m 일반적으로 sed -i를 휴대 할 수 없기 때문에 ' 사용을 피하고 있습니다. o, 귀하의 원본 데이터가 파괴 될 수 있습니다.
  • 이해합니다. RESOURCE 단어가있는 줄을 어떻게 검색 할 수 있습니까? 다른 데이터를 가지고있는 파일에서 검색하고 교체해야합니다. 또한 파일 이름을 매개 변수로 전달해야합니다.

Answer

The 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 

를 사용할 수 있습니다.

향후 참조를 위해이 모든 리가 마롤없이 필요한 도움을받을 수 있도록 원래 질문에서이 모든 것을 명확하게하는 것이 중요합니다.

댓글

  • [email protected]을 하드 코딩하고 싶지 않습니다. [email protected]과 같은 형식이어야합니다. [email protected]과 같은 다른 형식으로 바꾸고 싶습니다. 역동적이어야합니다
  • 나는 ' 이해하지 않습니다. 귀하의 질문에서 두 답변이 모두 달성하는 [email protected] 출력을 원한다는 것을 보여줍니다. 의미 : " [email protected] "을 하드 코딩하고 싶지 않습니까? 그리고 " 동적이어야합니다. "?
  • @Lakshminarayana 실제로 변경하려는 경우 파일은 첫 번째 명령에서 준 것처럼 sed i를 사용합니다. 두 번째 명령에서 sed 자체로 먼저 테스트하여 '가 원하는 작업을 수행하는지 확인한 다음 sed -i 첫 번째 명령에서 ' 작동하는지 확인합니다.
  • 하드 코딩하고 싶지 않다는 의미입니다. 그들. sed ' s / RESOURCE = Lnreddy37 @ gmail.com / RESOURCE = reddy17777 @ gmail.com / ' yourfile. 입력과 출력 모두 매개 변수처럼 전달하고 싶습니다.또한 RESOURCE가 있고 교체해야하는 해당 줄을 검색하고 싶습니다.
  • @Lakshminarayana 그런 다음 Kusalananda '의 답변을 사용하고 이메일 주소를 전달합니다. 변수 또는 grep RESOURCE= file에 표시되는 이메일 주소를 가져온 다음 sed -i를 사용하고 [email protected][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] 

to

[email protected] [email protected] 

도 가능합니다. 완전하고 명확한 설명 예를 사용하여 원하는 내용을 정확하게 말하도록 질문을 수정하세요.


좋습니다. 위의 s 명령. 이제 지시 한대로 파일을 제자리에서 편집하려면 다음을 수행하십시오.

sed -i { s command } { yourfile }

새 파일을 생성하려면

sed { s command } { oldfile } > { newfile }

{ } ; 그들은 단지 경계를위한 것입니다.

답글 남기기

이메일 주소를 발행하지 않을 것입니다. 필수 항목은 *(으)로 표시합니다