2015-01-23 5 views
0

번호가 1-19로 시작하는 줄에서만 마지막 숫자 필드를 조건부로 제거해야하는 큰 파일이 있습니다. 조건을 만족하지 않는 행을 포함하여 한 줄씩 전체 파일을 인쇄하고 싶습니다. grep을하고 나오지 라인이 개별적으로 작동하지만,숫자 문자열에서 마지막 필드를 조건부로 제거합니다.

cat > test.txt 
118222 
1 0.5632 0.10 0.05 1.00 0.45 5.00 0.50 0 
0.54 0.49 0.58 0.74 1.08 1.75 1.97 1.86 1.51 1.03 0.76 0.52 
0.22 0.20 0.21 0.25 0.37 0.58 0.61 0.64 0.55 0.45 0.39 0.23 
0.17 0.20 0.18 0.14 0.10 0.10 0.10 0.10 0.09 0.09 0.11 0.12 
5 0.0172 0.10 0.05 1.00 0.45 5.00 0.50 1 
0.35 0.32 0.39 0.71 1.15 1.87 1.96 1.72 1.36 0.91 0.70 0.43 
0.31 0.30 0.29 0.27 0.36 0.57 0.57 0.57 0.46 0.35 0.34 0.31 
0.28 0.29 0.26 0.16 0.11 0.11 0.12 0.11 0.11 0.10 0.14 0.26 

#!/bin/bash 

FILE=test.text 
while read i; do 
echo ${i} | grep -E '^([1-9]|1[0-9])' && sed 's/.$//' || echo ${i} 
done < $FILE 

이 작동하지 않습니다

여기 내 코드입니다.

모든 도움을 주시면 대단히 감사하겠습니다.

답변

1

sed에 조건부 대체를 사용하십시오.

sed '/^\([1-9]\|1[0-9]\) /s/.$//' test.text 

처음에 번호가 일치 한 후에 공백을 추가했습니다. 그렇지 않은 경우 118222과 일치하며 범위에 있지 않습니다. 이는 1으로 시작하기 때문입니다.

DEMO

귀하의 제목이 당신이 줄에서 마지막 문자를 제거하려면 말한다, 문제는 마지막 숫자 문자는 말한다. 후자는 다음과 같아야합니다.

sed '/^\([1-9]\|1[0-9]\) /s/[0-9]\([^0-9]*\)$/\1/' test.text 
+0

예. 이것은 완전히 작동합니다. 숫자 문자를 제거하고 싶었 기 때문에 두 번째 문자를 사용했습니다. 내 제목에 선명도가 부족해서 죄송합니다. 정말 sed 튜토리얼에 더 많은 시간을 할애해야합니다. 고맙습니다! – user3367135

관련 문제