대체 명령에 특정 행 세트를 어떻게 일치시킬 수 있습니까?sed 명령의 특정 행 일치
(잘못된) :
sed -e'71,116,211s/[ ]+$//' ...
내가 선 (71), (116)에 후행 공백을 제거하려면 211 만
대체 명령에 특정 행 세트를 어떻게 일치시킬 수 있습니까?sed 명령의 특정 행 일치
(잘못된) :
sed -e'71,116,211s/[ ]+$//' ...
내가 선 (71), (116)에 후행 공백을 제거하려면 211 만
당신은 같은 것을 시도 할 수 :
awk 'NR== 71 || NR == 116 || NR == 211 {sub(/ *$/,"",$0)}{print $0}'
또는
을sed '71s/ *$//;116s///;211s///'
sed '71bl;116bl;211bl;b;:l;s/[ ][ ]*$//' input
지정된 행의 경우이 스크립트는 l
레이블로 점프합니다. 다른 줄은 맨 끝에 branch
으로 스크립트 끝으로 점프합니다.
awk -v k="71,116,221" 'BEGIN{split(k,a,",")}
(NR in a) { sub(/ *$/,"",$0) }1' input
이 당신 (GNU이 나오지도)을 위해 일 수 있습니다
sed -r '/\s+$/!b;71s///;116s///;221s///' file
혹은 :
sed -e '/ *$/!b' -e '71s///' -e '116s///' -e '221s///' file
이미 말한 것처럼 :
sed -e '71ba' -e '116ba' -e '221ba' -e 'b' -e ':a' -e 's/ *$//' file
당신의'sed' 해결책을 게시하려고 생각했지만 약간의 개선만으로 (나는 생각합니다.) 정규 표현식 부분을 비워두면 마지막 부분을 취합니다. 그래서 단 한 번만 (첫 번째 줄에) 쓰고 나중에 같이 쓰는 것이 필요합니다. '... 116s ///; ...' – Birei
좋은 점 - 그 점을 잊어 버렸습니다. - 대답을 업데이트했습니다. –