RESOURCE
키워드가있는 파일이 있습니다. 다음과 같이 파일의 모든 위치에서 발생할 수 있습니다.
[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
문자열로 시작하는 줄을 선택합니다. 이러한 각 줄에 대해 이메일 주소가 줄에있는 경우이를 대체합니다. 대체에 사용 된 패턴은 =
와 일치하고 주소가 끝나는 지 확인합니다. 줄 끝에.
코멘트
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 }
{
및 }
; 그들은 단지 경계를위한 것입니다.
sed -i
로 실행합니다. ' 올바른 작업을 수행하고 있으며 ' 새 파일로 리디렉션하지 않습니다. ' m 일반적으로sed -i
를 휴대 할 수 없기 때문에 ' 사용을 피하고 있습니다. o, 귀하의 원본 데이터가 파괴 될 수 있습니다.