두 개의 텍스트 파일이 있습니다. sed 또는 grep을 사용하여 일치하는 문자열을 찾은 다음 text2.txt에서 문자열을 바꾸는 방법은 무엇입니까?
name=" " 아래에 있는 모든 항목을 검색해야 합니다. 찾은 경우 path="" 아래의 콘텐츠로 바꿉니다. output.txt에는 필수 출력 데이터가 있습니다.
테스트1.txt
domain merge_requests
abc frameworks merge_requests
dvc frame-test merge_requests
test2.txt
<project path="test/domain" name="device/common" />
<project path="test1/frameworks " name="test/frameworks" />
<name="test/frame-test" project path="test3/frame-test" />
출력.txt
test/domain merge_requests
test1/frameworks merge_requests
test/frame-test merge_requests
답변1
귀하의 설명이 귀하의 예와 다릅니다. 예제에 따르면 항상 /
첫 번째 따옴표 붙은 문자열 뒤의 하위 문자열을 첫 번째 따옴표 붙은 문자열 전체로 바꾸고 앞의 단어가 있으면 제거하려고 합니다.
test2.txt
따라서 먼저 다음과 같이 보유 버퍼에서 첫 번째 인용 문자열을 수집할 수 있습니다.
sed 's/[^"]*"\([^"]*\)".*/\1/;H;$!d;g' test2.txt
그런 다음 이 세트를 각 보유에 추가하여 교체에 사용합니다.
sed '/<.*>/{s/[^"]*"\([^"]*\)".*/\1/;H;d};G;s/[^ ]* *\([^ ]\{1,\}\)\( [^\n]*\)\n.*\n\([a-z0-9]*\/\)\1.*/\3\1\2/;s/\n.*//' test2.txt test1.txt
마지막 s
명령은 일치하지 않는 행을 처리하는 것입니다. 귀하의 경우에는 그런 일이 발생하지 않으면 그대로 둘 수 있습니다. 그러면 출력이 제공됩니다.
설명하는 내용과 더 비슷하게 만들고 싶다면 조정할 수 있습니다. 하지만 name
sum 의 순서 변경에 주의하세요 path
.