나는 "추가", "지우기" 및 "찾기" 매개변수를 사용하여 할 일 목록 스크립트를 작성했습니다. "complete" 매개변수를 전달해야 하며 스크립트는 관련 행을 찾아 첫 번째 열을 다른 값으로 바꿉니다. 어떻게 해야 하나요?
스크립트 결과는 다음과 같습니다.
0,H,First Task
0,L,Second Task
0,M,Third Task
이제 비슷한 작업을 수행 ./todo done 2
하고 다음 결과를 얻고 싶습니다.
0,H,First Task
1,L,Second Task
0,M,Third Task
답변1
#!/bin/bash
fis=$1
col1=$2
if [[ $fis == "done" ]]
then
awk -v col1="$col1" -F "," 'BEGIN{OFS=","}NR==col1{gsub(".*","PRAVEEN",$1)}1' ht.txt
fi
산출
0,H,First Task
PRAVEEN,L,Second Task
0,M,Third Task
답변2
file=todo.list
line=2
perl -F, -pi -lapse '
$F[0] = 1 if $. == $line;
$_ = join ",", @F' -- -line="$line" -- "$file"
또는 다음을 사용하여 gawk
:
file=todo.list
line=2
gawk -i /usr/share/awk/inplace.awk -v line="$line" -F, -v OFS=, -e '
NR == line {$1 = 1}
{print}' -E /dev/null "$file"
GNU를 사용하면 sed
다음과 같은 작업을 수행할 수 있습니다.
sed -i -e "${line}s/^[^,]*/1/" -- "$file"
하지만 사전에 정리해야 합니다 $line
(문자 시퀀스가 포함되어 있는지 확인 [0123456789]
). 그렇지 않으면 다음과 같은 문제가 발생할 수 있습니다.임의 명령 실행취약점.
그리고 gawk
,사용하지 마세요-i inplace
현재 작업 디렉터리(as or)에서 확장 기능을 먼저 gawk
로드 하려고 하면 누군가가 해당 디렉터리에 악성 코드를 심었을 수 있습니다. 시스템과 함께 제공되는 확장 프로그램 의 경로 는 다를 수 있습니다. 출력을 참조하세요.inplace
inplace
inplace.awk
inplace
gawk
gawk 'BEGIN{print ENVIRON["AWKPATH"]}'