텍스트 파일의 특정 줄의 줄 번호로 바꾸기

텍스트 파일의 특정 줄의 줄 번호로 바꾸기

Bash에서 내가 해야 할 일은 텍스트 파일의 두 번째 줄에 있는 특정 문자를 해당 파일의 줄 수로 바꾸는 것입니다. 따라서 이것은 행 수를 계산하는 작업을 수행합니다.

cat test.csv | wc -l

다음 명령은 수정 중인 ;0;파일에서 발견된 번호를 위 명령에서 얻은 번호로 변경합니다(이 경우 33).

sed -i '2s/;0;/;33;/' test.csv

하지만 이제 위의 두 명령을 결합하여 단일 명령으로 작동하려고 합니다(내 응용 프로그램에 필요합니다). 아래에 표시된 대로 여러 가지 방법을 시도했지만 성공하지 못했습니다.

sed '2s/;0;/`cat test.csv | wc -l`/' test.csv
cat test.csv | wc -l | sed '2s/;0;//' test.csv
sed '2s/;0;/`${cat test.csv | wc -l}`/' test.csv
sed -e '2s/;0;/echo `${cat test.csv | wc -l}`/;e' test.csv
sed -e '2s/;0;/${echo `cat test.csv | wc -l`}/' test.csv
$rn=`cat test.csv | wc -l`; sed '2s/;0;/${rn}/' test.csv

누구든지 이 문제를 해결하도록 도와줄 수 있나요?

답변1

모든 명령에서는 sed표현식 주위에 작은따옴표를 사용합니다. 쉘은 작은따옴표 내에서 확장되지 않습니다.

대신(큰따옴표 명령 대체를 위해 작은따옴표 표현식을 일시적으로 중단)

sed '2s/;0;/;'"$( wc -l <test.csv )"';/' test.csv

또는 (전체 표현식에 큰따옴표 사용),

sed "2s/;0;/;$( wc -l <test.csv );/" test.csv

또는 (변수를 사용하고 위와 같이 큰따옴표를 사용),

lines=$( wc -l <test.csv ); sed "2s/;0;/;$lines;/" test.csv

-i(작동하는지 알기 전까지는 사용하지 마세요!)

관련된:

관련 정보