Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/bash/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Bash 只有当匹配项不受字母或数字约束时,如何使用sed查找和替换项?_Bash_Sed - Fatal编程技术网

Bash 只有当匹配项不受字母或数字约束时,如何使用sed查找和替换项?

Bash 只有当匹配项不受字母或数字约束时,如何使用sed查找和替换项?,bash,sed,Bash,Sed,我正在使用sed查找和替换项目,例如: sed -i 's/fish/bear/g' ./file.txt 我想将此限制为仅更改前后没有字母或数字的项目,例如: 鱼吃了虫子。会改变,因为只有空格在前面和后面 狮子鱼吃了蠕虫。不会改变,因为鱼的前面有一个字母 如何查找和替换某些项目,但如果至少有一个字母或数字出现在前面或后面,则不能这样做?在fish之前和之后使用负字符类,例如:\(^\\\[^[:alnum:]\)fish\($\\[^[:alnum:]\)。上面说: 行的开头或任何不是字

我正在使用
sed
查找和替换项目,例如:

sed -i 's/fish/bear/g' ./file.txt
我想将此限制为仅更改前后没有字母或数字的项目,例如:

  • 鱼吃了虫子。
    会改变,因为只有空格在前面和后面
  • 狮子鱼吃了蠕虫。
    不会改变,因为鱼的前面有一个字母

如何查找和替换某些项目,但如果至少有一个字母或数字出现在前面或后面,则不能这样做?

fish
之前和之后使用负字符类,例如:
\(^\\\[^[:alnum:]\)fish\($\\[^[:alnum:]\)
。上面说:

  • 行的开头或任何不是字母数字的东西
  • 接着是鱼
  • 后跟行尾或任何非字母数字的内容
  • 这保证了紧跟在
    fish
    前面和后面的字符不是字母数字

    sed 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
    

    fish
    之前和之后使用负字符类,例如:
    \(^\\\[^[:alnum:]\)fish\($\\[^[:alnum:]\)
    。上面说:

  • 行的开头或任何不是字母数字的东西
  • 接着是鱼
  • 后跟行尾或任何非字母数字的内容
  • 这保证了紧跟在
    fish
    前面和后面的字符不是字母数字

    sed 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
    

    检查字符串前后的字符。如果是在开头或结尾,就不会有字符要检查,所以也要检查

    sed -i 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
    

    检查字符串前后的字符。如果是在开头或结尾,就不会有字符要检查,所以也要检查

    sed -i 's/\(^\|[^[:alnum:]]\)fish\($\|[^[:alnum:]]\)/\1bear\2/g'
    

    使用单词边界转义:

    sed -i 's/\<fish\>/bear/g' inputfile
    
    sed-i's/\/bear/g'输入文件
    

    某些版本的
    sed
    可能不支持此功能。

    使用单词边界转义:

    sed -i 's/\<fish\>/bear/g' inputfile
    
    sed-i's/\/bear/g'输入文件
    
    某些版本的
    sed
    可能不支持此功能