특수 줄을 찾고 특수 문자열을 바꾸는 방법

특수 줄을 찾고 특수 문자열을 바꾸는 방법

나는 "추가", "지우기" 및 "찾기" 매개변수를 사용하여 할 일 목록 스크립트를 작성했습니다. "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로드 하려고 하면 누군가가 해당 디렉터리에 악성 코드를 심었을 수 있습니다. 시스템과 함께 제공되는 확장 프로그램 의 경로 는 다를 수 있습니다. 출력을 참조하세요.inplaceinplaceinplace.awkinplacegawkgawk 'BEGIN{print ENVIRON["AWKPATH"]}'

관련 정보