2013-08-17 167 views
1

尝试执行一个unix shell脚本,该脚本从每行包含一个单词的文件获取输入,找到以字母s结尾并删除该字母的任何单词。以字母结尾并删除该字母的SED字

Input: 
Glass 
Faces 
Passed 
Hello 
Tests 
Pass 

Output 
Glas 
Face 
Test 
Pas 

我甚至不介意输出仍然包含没有以s结尾的单词。我可以与此合作。

到目前为止,我已经得到了

cat $1 | sed -e '/\s$/N; s/\(.*\)./\1/;' 

但是,这是每一个字去掉最后一个字母,不仅以s结尾的人。

我是新来的unix和编程的一般,必须承认语法仍然很难让我得到正确的。任何帮助,将不胜感激。

+0

什么是代码,如果我也想保持这种没”的wprds吨符合搜索条件?所以它会找到以s结尾的单词并删除s,但输出将包含所有不以s结尾的单词。 – user2661167

回答

1

这会工作:

sed -e '/s$/!d' -e 's/s$//' 

还是这个:

sed '/s$/!d;s/s$//' 

还是这个:

sed -n '/s$/{s/s$//;p;}' 
+0

谢谢你,你提供的第一个例子很好。你能向我解释第一部分代码的一部分吗?我把第二部分理解为没有任何东西代替's'。但是!d是什么意思? 我很新,想了解语法,而不是让真棒的人给我答案:) – user2661167

+0

@ user2661167:'/ s $ /'意思是“如果它有结尾” ,'/ s $ /!'的意思是“如果*末尾没有*','d'则意味着”删除“。 – Beta

+0

因此,如果我想保持不以s结束的话,我会使用sed -e'/ s $ //'? – user2661167