Bash Sed通配符搜索勾选(';)并替换

Bash Sed通配符搜索勾选(';)并替换,bash,sed,Bash,Sed,我似乎不记得如何使用通配符函数替换文档中的勾号 下面是data.txt: +40 46'N + 014 15'E +21 17'N -157 52'W 我想用S替换'S'之后的所有内容。尝试时,sed命令会出错: sed 's/'.*/S/g' data.txt > new.txt 搜索蜱虫并替换它们似乎是sed的一个问题?非常感谢您的帮助 尝试转义它: sed 's/'\''.*/S/g' data.txt > new.txt 或者使用双引号 sed "s/'.*

我似乎不记得如何使用通配符函数替换文档中的勾号

下面是data.txt:

 +40 46'N + 014 15'E
 +21 17'N -157  52'W
我想用S替换'S'之后的所有内容。尝试时,sed命令会出错:

 sed 's/'.*/S/g' data.txt > new.txt 
搜索蜱虫并替换它们似乎是sed的一个问题?非常感谢您的帮助

尝试转义它:

sed 's/'\''.*/S/g' data.txt > new.txt 
或者使用双引号

sed "s/'.*/S/g" data.txt > new.txt 
尝试逃避它:

sed 's/'\''.*/S/g' data.txt > new.txt 
或者使用双引号

sed "s/'.*/S/g" data.txt > new.txt 
试试这句话:

sed "s/'.*/S/" file

避免跳转单引号

另外,您不需要使用
g
标志。

试试这句话:

sed "s/'.*/S/" file

避免跳转单引号


另外,您不需要使用
g
标志。

有时引用
是不够的。您应该将其放置在
[]
之间

sed "s/['].*/S/" data.txt
示例输出:

 +40 46S
 +21 17S
 +40 46'S
 +21 17'S
如果你真的是指一切之后,你可以这样做:

sed "s/^\([^']*[']\).*/\1S/" data.txt
示例输出:

 +40 46S
 +21 17S
 +40 46'S
 +21 17'S
如果您仅指每个实例旁边的字母:

sed "s/\([']\)[^[:space:]]\+/\1S/g" data.txt
输出:

 +40 46'S + 014 15'S
 +21 17'S -157  52'S

有时引用
是不够的。您应该将其放置在
[]
之间

sed "s/['].*/S/" data.txt
示例输出:

 +40 46S
 +21 17S
 +40 46'S
 +21 17'S
如果你真的是指一切之后,你可以这样做:

sed "s/^\([^']*[']\).*/\1S/" data.txt
示例输出:

 +40 46S
 +21 17S
 +40 46'S
 +21 17'S
如果您仅指每个实例旁边的字母:

sed "s/\([']\)[^[:space:]]\+/\1S/g" data.txt
输出:

 +40 46'S + 014 15'S
 +21 17'S -157  52'S

x27做什么?谢谢x27做什么?谢谢