2017-02-14 1 views
0

txt 파일의 특정 줄을 내 셸 스크립트로 바꾸려고합니다. 예를 들면 다음과 같습니다.텍스트 파일의 특정 줄을 쉘 스크립트로 대체하는 방법은 무엇입니까?

cat aa.txt: 
auditd=0 
bladeServerSlot=0 

스크립트를 실행할 때 다음과 같이 "bladeServerSlot"을 12로 변경하고 싶습니다.

cat aa.txt: 
auditd=0 
bladeServerSlot=12 

도와 주시겠습니까? sed 및 역 참조 사용

+0

예 :'perl -ne '$ _ = ~ s/bladeServerSlot \ = 0/bladeServerSlot \ = 12 /; print $ _; ' aa.txt' – AbhiNickz

+1

'perl -pe 's/bladeServerSlot = 0/bladeServerSlot = 12 /'aa.txt'로 훨씬 더 멋지게 작성할 수 있습니다. – Sobrique

답변

0

:

awk 사용
sed -r '/bladeServerSlot/ s/(^.*)(=.*)/\1=12/g' inputfile 

, bladeServerSlot이 포함 된 광고를 검색하고 그 광고의 번째 열을 대체 할 것이다.

awk 'BEGIN{FS=OFS="="}/bladeServerSlot/{$2=12}1' inputfile 
+0

대단히 감사합니다! –

+0

누구든지 downvoted, downvote에 대한 이유를 설명하기 위해 예의를 가지고 주시기 바랍니다. –

+0

sed가'/^bladeServerSlot/s /=.*$/= 12 /' –

-1

예에서 줄 바꾸기가 정말 필요합니까? bladeServerSlot은 변수이므로 값을 재설정 할 수 있습니다.

bladeServerSlot=`any command` 

또는이 변수를이 스크립트에 제공된 매개 변수로 채울 수 있습니다.

bladeServerSlot=$1 

$1은 스크립트의 첫 번째 매개 변수입니다. 나는 이것이 여기에 멋진 정규식을하는 것보다 당신의 문제를 해결하는 더 깨끗한 방법 일 것이라고 생각한다. sed/perl 솔루션이 효과적 일지 모르지만 스크립트를 읽는 다른 사람들에게는 분명하지 않습니다.

+0

처럼 좀 더 명확 해 보입니다. –

2
perl -pe 's/bladeServerSlot=\K\d+/12/' aa.txt > output.txt 

\K 이전의 모든 경기를 버립니다 positive lookbehindparticular form입니다. 그래서 우리는 뒤 따르는 것을 대체 할 필요가 있습니다. s/은 기본적으로 현재 줄을 포함하는 $_에 적용됩니다. -p은 모든 행에 대해 $_을 인쇄하므로 다른 모든 행이 복사됩니다. 출력을 파일로 리디렉션합니다.

관련 문제