我有这个文本(the_file.txt):
one two three four
five six seven eight
nine ten eleven twelve
thirteen fourteen fifteen sixteen
我想用" Z"替换每个单词,除了单词" six",使用gnu sed。我是这样做的:
sed 's/\<\([^s]\|.[^i]\|.[^ ][^x]\|[^ ]\{4\}\)[^ ]*/Z/g' the_file.txt
它有效:
Z Z Z Z
Z six Z Z
Z Z Z Z
Z Z Z Z
我的问题是:有更简单的方法吗?因为如果有两三个词我想保留,那么正则表达式变得非常难看。
我知道使用其他工具(例如awk)会更容易,但我有兴趣提高我的sed能力,可能会使用一些脚本。
感谢。
答案 0 :(得分:1)
对于多个单词:
$ sed -E 's/\<(six|one|eleven)\>/\n&/g; s/(^| )\S+/\1Z/g; s/\n//g' file
one Z Z Z
Z six Z Z
Z Z eleven Z
Z Z Z Z
上面在每个目标词之前放置一个换行符然后替换每个前面有空格的非空格序列或输入字符串的开头(即不是我们的目标词,因为它们现在以换行符开头), Z然后删除第一步中添加的换行符。
答案 1 :(得分:0)
以下内容可能更容易维护:
sed 's/\(six\)\|\([^ ]\+\)/\1Z/g;s/sixZ/six/g'
它首先将Z
替换为six
,但sixZ
替换为Select
ID, DateCome, UserName, Min(TimeCom) As TimeCome, Max(TimeCom) As TimeLeave
From
YourTable
Group By
ID, DateCome, UserName
,然后由import matplotlib.colors as colors
def get_named_color(hex):
return colors.cnames.keys()[colors.cnames.values().index(hex.upper())]
替换,然后由第二次替换修复。