Perl 删除一行中两个字符串之间的字符串
我试图删除括号中的所有内容,如果一行只有一行,我可以这样做,但如果一行有多行,它似乎删除了外部的所有内容 第一个回波工作正常,但如果一个信号有多个,它就无法分类Perl 删除一行中两个字符串之间的字符串,perl,awk,sed,Perl,Awk,Sed,我试图删除括号中的所有内容,如果一行只有一行,我可以这样做,但如果一行有多行,它似乎删除了外部的所有内容 第一个回波工作正常,但如果一个信号有多个,它就无法分类 expected input: 1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n> expected out come: 1 2 3 4 .... 1000 谢谢以下awk将对您有所帮助 echo "hi, <how> are <
expected input: 1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>
expected out come: 1 2 3 4 .... 1000
谢谢以下awk将对您有所帮助
echo "hi, <how> are <you>? " | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
或
解释:只需遍历该行的所有字段,通过启动一个从i=1到NFnumber字段值的for循环,我检查字段的值是否满足regex的要求,意味着它已经满足,然后我将使其无效。使用awk:
*与贪婪匹配零次或多次。使用否定字符类]*>
应该是或]*>
echo "hi, <how> are <you>? " | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk '{for(i=1;i<=NF;i++){if($i~/<.*>/){$i=""}}} 1'
# using gsub - recommended
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk 'gsub(/<[^>]*>/,"")'
1 2 3 4 ...... 1000
# OR using FS and OFS
$ echo "1 <a> 2 <b> 3 <c> 4 <d> ...... 1000 <n>" | awk -F'<[^>]*>' -v OFS='' '$1=$1'
1 2 3 4 ...... 1000
echo "hi, <how> are <you>? " | sed 's/<[^>]*>//g'