
나는 넷리스트를 trail.txt
포함하는 을 가지고 있습니다. spice
이제 모든 확장 매개변수를 단 한 줄로 바꾸고 싶습니다. 즉, +
해당 줄을 제거하고 이전 줄에 추가합니다.
추적.txt
data
+ net06706 net06707
+ net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u
(필수)trail.txt
data net06706 net06707 net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u
주문하다
sed -e 's/^+/\b/g' trail.txt
교체를 시도했지만 성공하지 못했습니다 +
. backspace
이 문제를 해결할 다른 방법이 있나요? 다른 대안이 있나요?
답변1
백스페이스 방법을 사용할 수 없을 것 같지만 다음과 같은 작업을 수행할 수 있습니다.
sed -e :a -e '$!N;s/\n+/ /;ta' -e 'P;D' trail.txt
바라보다유명한 Sed 전문 용어 설명, 1부: 파일 간격, 번호 매기기, 텍스트 변환 및 교체,40. 이전 줄이 등호 "="로 시작하는 경우 이전 줄 뒤에 줄을 추가합니다.(분명히 로 대체됨 +
) =
.
답변2
FWIW, GNUawk
awk -vRS='\\n\\+?' '{ORS=RT == "\n+"? "":RT; print}' trail.txt
data net06706 net06707 net221 net222 net223
m1 net10 rwl vdda vss nch l="l1pg+0.005u" w=w1pg+0.105u
m0 vdda rwld net10 vss nch l="l1pg+0.005u" w=w1pg+0.105u
답변3
sed를 사용하는 것은 약간 까다로울 수 있으므로 몇 가지 아이디어가 있습니다.
perl -00 -pe 's/\n\+\s*/ /g' file
awk '
{
if (/^\+/)
sub(/^\+[[:blank:]]*/, " ", $0)
else
if (NR > 1) print ""
printf "%s", $0
}
END {print ""}
' file
답변4
GNU sed
perl
다음과 같은 간단한 작업 에는 허용되지 않습니다 .
sed -z 's/\n+//g' trail.txt