도움을 주셔서 감사합니다. 나는 이것을 했다:
cat file1.txt | sed 's/1:2=//'| sed 's/1:3=//'| sed 's/1:4=//'| sed 's/1:5=//'| sed 's/1:6=//'| sed 's/2:3=//'| sed 's/2:4=//'| sed 's/2:5=//'| sed 's/2:6=//'| sed 's/3:4=//'| sed 's/3:5=//'| sed 's/3:6=//'| sed 's/4:5=//'| sed 's/4:6=//'| sed 's/5:6=//' > file2.txt
만족하지만 이제 더 많은 조합(위 예의 3개뿐 아니라 16개 치료에서 가능한 모든 조합)이 포함된 파일이 있고 120개 조합을 모두 입력하고 싶지는 않습니다. 모든 콜론과 그 주변의 숫자를 공백으로 바꾸는 방법을 찾는 데 도움을 주실 수 있나요?
답변1
여기서 중요한 점은 요구 사항에 맞는 정규식을 찾는 것입니다.
예를 들어,
sed 's/[0-9]:[0-9]=//'
이는 여러분이 작성한 모든 패턴과 일치하지만 와도 일치할 것입니다. 3:2=
이는 아마도 여러분이 원하는 것이 아닐 것입니다.
하지만 다음과 같은 기능을 사용할 수 있어야 합니다.
sed 's/1:[2-6]=//;s/2:[3-6]=//;s/3:[4-6]=//;s/4:[56]=//;s/5:6=//'
이것은 이미 많은 타이핑을 줄여줍니다.
숫자가 한 자리보다 크면 문제가 됩니다. 예를 들어 다음과 같은 두 가지 모드로 나눌 수 있습니다.
s/5:[6-9]=//;s/5:1[0-6]=//
그러나 어느 시점에서는 도구가 더 적절 awk
해 보입니다 perl
.
#!/usr/bin/perl
while (<>){
chomp;
if (/(.*)([0-9]+):([0-9]+)=(.*)/){
if ($2<$3){
print "$1$4";
}
else {
print "$1$2i:$3=$4\n";
}
}
}
답변2
작동합니다!
sed 's/[0-9]*:[0-9]*=//g' file1.txt > file2.txt
건배와 감사합니다!
답변3
가 보다 작은 모든 <integer1>:<integer2>=
항목 을 제거하려면 다음을 수행할 수 있습니다.<integer1>
<integer2>
<file perl -pe 's{(\d+):(\d+)=}{$1 < $2 ? "" : $&}ge'
그건 그렇고 1:2= 20:3= 5:5=
, 내가 줄게 20:3= 5:5=
.