$URL로 grep한 다음 $URL을 sed합니다.

$URL로 grep한 다음 $URL을 sed합니다.

1.txt에 다음이 있습니다.

https://www.google.se/
https://www.bing.com/
URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt

2.txt를 입력합니다.

https://www.google.se/">
https://www.bing.com/">

2.txt에 원합니다:

https://www.google.se/">https://www.google.se/
https://www.bing.com/">https://www.bing.com/

답변1

데이터를 변수에 저장할 이유가 없는 것 같습니다.

awk -v OFS='">' '{ print $0, $0 }' 1.txt >2.txt

이렇게 하면 원하는 작업을 수행할 수 있습니다. 즉, ">각 줄의 끝에 두 문자를 삽입하고 그 뒤에 줄의 원래 내용을 삽입하는 것입니다. 이 코드에서는 행을 새 필드로 출력하여 이를 수행합니다. 출력 필드 구분 기호가 OFS자동으로 그 사이에 삽입됩니다. 값은 명령줄에서 OFS설정됩니다 .">

또는 다음을 사용하십시오 sed.

sed 's/\(.*\)/\1">\1/' 1.txt >2.txt

이는 캡처 그룹을 사용하여 전체 행을 캡처합니다. 그런 다음 이는 캡처된 비트, string ">및 캡처된 비트로 다시 대체됩니다.

의견에서 지적했듯이 더 짧은 변형은

sed 's/.*/&">&/' 1.txt >2.txt

&명령의 대체 부분 에 있는 경우 s입력 비트는 표현식과 일치하는 비트로 대체됩니다. 표현식은 완전한 행이 있고 .*행 이 중간에 두 번 삽입된다는 것입니다.&&">&">


당신의 파이프라인,

URL=$(grep ".*" ./1.txt) | sed "s/$/\">${URL}/" ./1.txt > ./2.txt

왼쪽과 오른쪽이 서로 독립적으로 실행되기 때문에(그리고 둘 사이에는 통신이 없기 때문에) 별 의미가 없습니다. 표현식의 값은 $URL비어 있습니다 sed.

혹시 사용해보신 분이라면

URL=$(grep ".*" ./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt

이는 다음과 같습니다.

URL=$(<./1.txt); sed "s/$/\">${URL}/" ./1.txt >./2.txt

이 명령은 각 줄의 끝에 변수의 전체 내용(전체)을 sed삽입 하려고 시도합니다. 또한 값에 명령 구분 기호를 방해하는 여러 문자가 포함되어 있기 때문에 실패합니다 .$URL1.txt//s

관련 정보