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
(작동하는지 알기 전까지는 사용하지 마세요!)
관련된: