소개
sed -e "s/^.*\$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/"
,
1 개의 sed 명령, 즉 "대체"에 대한 s/.../.../
입니다. 간단히 말하자면, 작업하는 모든 라인에 대해 단일 "검색 및 교체"를 수행합니다.
"검색"부분은 ^.*\$
이고 "교체"부분은 PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/
입니다.
^.*\$
은 단순한 Regular expression이며 여기서 "모든 것"또는 "전체 줄"을 의미합니다. 그래서, s
명령은 벤자민 W. pointed out\0
의 사용이 "이상한"있는 그대로
PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:\0/
으로 전체 라인을 대체합니다. 분명히 소위 참조로 의미가 있었기 때문에 우리가 검색 한 부분이 "PUTVAL (...) val = 30 N :"텍스트 뒤에 추가되었습니다.
나는 이것이 제시되는 방식에 몇 가지 문제가 있습니다.
\0
내 데비안 GNU Sed의 4.2.2의 맨 페이지에 있지 않습니다.
sed
명령을 "
으로 인용하면 불필요하게 복잡해지며 오류가 발생하기 쉽습니다. 대신 작은 따옴표를 사용해야합니다.
\0
쉘과 특히 Sed의 어느 곳에서나 null 문자를 매우 잘 나타낼 수 있습니다. "
따옴표로 인해 더 많은 빨간색 플래그가 발생합니다.
sed
을 사용하면 텍스트 앞에 "Sed의 쓸모없는 사용"이 표시됩니다. 당신에 대한 sed
을 요구하기 때문에
, 여기에 내가에 다음과 같이 쓸 수있다 : "검색 부분을 찾을 것"에 대한
sed -e 's/^.*$/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:&/'
&
스탠드. 귀하의 경우 전체 라인.
마지막 소수점을 자르기 위해 여러 가지 방법이 있습니다. 오히려 간단한 접근법은 입력에 항상 소수점 2 자리가 있다고 가정합니다. 내가 말했듯이
sed -e 's/.$//;s/^[0-9][0-9]*\.[0-9]/PUTVAL downloads\/exec-environmental\/temperature-cpu interval=30 N:&/'
그러나, sed
이 과잉 여기에 있습니다 : 그럼 우리가 "아무것도"(//
)와 마지막 문자 (.$
)를 대체하는 명령을 앞에 추가 할 수있다. 당신은 단지 예를 printf
을 위해 사용할 수 있습니다
생각
text='PUTVAL downloads/exec-environmental/temperature-cpu interval=30 N:'
printf "%s%3.1f\n" "$text" $(/usr/local/bin/pcsensor -l60 -n)
은 '\ 0'오타해야하지만 분명히 그와 같은 작업을 수행'&'(전체 일치를 반복). 하지만 어디서나 문서화 된 것을 볼 수는 없습니다. –
그런데 사용중인 sed의 버전은 무엇입니까? 이 sed 명령을 사용하여 입력에 대한 출력이 달라집니다. –
어쨌든 나는 말하지 않는다. 나에게 덤벼 들었어. sed (GNU sed) 4.2.2 –