cat과 sed를 동시에 사용하는 방법은 무엇입니까? [복사]

cat과 sed를 동시에 사용하는 방법은 무엇입니까? [복사]

나는 이 cat작업을 수행했습니다 sed.

cat ${location_x}/file_1 > ${location_y}/file2
sed -i "s/0/1/g" /${location_y}/file2

이 작업을 한 줄로 수행할 수 있습니까?

이대로가 그리울지도 몰라여기, 그러나 이 설명은 그것의 반대 문제를 다루고 있는 것 같고, 위의 내용을 이중 앰퍼샌드() 또는 세미콜론() 없이는 하나의 작업으로 통합할 수 없으며 점점 cat더 가까워지고 있습니다. 이것이 불가능하다고 가정하면 , 하지만 제가 틀릴 수도 있기 때문에 여기에 물어보는 것이 중요합니다.sed&&;

영어를 사용하는 모든 독자가 "&" 또는 "세미콜론"이라는 용어에 익숙하지는 않으므로 이러한 용어에 대해 자세히 설명합니다.

답변1

예:

sed 's/0/1/g' "$location_x/file_1" >"$location_y/file2"

코드는 먼저 첫 번째 파일의 복사본을 만든 다음 를 사용합니다 sed -i. 위의 코드는 원본 파일에서 읽고 변경한 다음 결과를 새 파일에 씁니다. 여기에는 필요가 없습니다 cat.

GNU를 사용 중이고 Leading 을 포함 sed할 수 있는 경우 경로가 명령줄 플래그로 해석되지 않도록 해야 합니다.$location_x-

sed -e 's/0/1/g' -- "$location_x/file_1" >"$location_y/file2"

이중 대시는 명령줄 옵션의 끝을 표시합니다. 대안은 <파일 내용을 로 리디렉션하는 것입니다 sed. 다른 sed구현(BSD sed)은 옵션이 아닌 첫 번째 인수에서 명령줄의 구문 분석 옵션을 중지하는 반면, sed명령줄을 정렬할 때 GNU(다른 GNU 소프트웨어와 마찬가지로)는 다시 시작됩니다. .

이 특정 편집 작업(모두 0을 1로 변경)의 경우 다음도 작동합니다.

tr '0' '1' <"$location_x/file_1" >"$location_y/file2"

읽기 는 tr항상 표준 입력에서 이루어지므로 <입력은 원본 파일에서 리디렉션됩니다.


sed나는 명령줄에서 액세스하려고 시도하고 있는데 /${location_y}/file2, 그 위의 줄에 있는 경로( /경로의 시작 부분에 있는 경로) 와 다르다는 것을 알았습니다 . 오타일 수 있습니다.

답변2

tee다른 접근 방식을 사용하는 대체 솔루션:

cat "${location_x}/file1" |\
  tee "${location_y}/file2" |\
  sed -i "s/0/1/g"

다음을 수행하십시오.

- cat: 읽고 ${location_x}/file1전송합니다.tee

- tee: 입력을 쓰고 파이프합니다 cat.${location_y}/file2sed

- : 입력 시 sed실행sedtee

sed선택 사항: 출력을 파일 에 쓰려면 > /path/to/file덮어쓰거나 >> /path/to/file추가하려면 추가하세요.

관련 정보