Ubuntu sed创建重复的行而不是仅返回一个替换的行

时间:2016-05-20 07:11:51

标签: php bash magento ubuntu sed

我在下面的脚本中提取Gedit中的当前打开文件路径。

#!/bin/bash
origPath=$GEDIT_CURRENT_DOCUMENT_URI
if [[ $origPath == *"smb"* ]]
then
    finalPath=`php -f /var/www/html/pathswapcmd.php smb_path=$origPath`;
else
    finalPath=$origPath;
fi
## echo -n $finalPath;
echo -n $finalPath | sed 's/^.*app/app/p' | xclip -sel clip;
exit;

通常我的系统中有Magento文件,因此我的路径只需从appskin文件夹等开始。

现在,当我尝试删除app之前的所有内容时sed删除它但是它给路径三次分隔了一个垃圾字符,这个字符在Ubuntu文件夹的地址栏中无法识别(ofcourse)管理器。

我想要从sed命令中删除重复行的简单明了的解决方案。

1 个答案:

答案 0 :(得分:1)

s/pattern/replacement/p将在默认情况下完成任何操作后输出行缓冲区,如果由于p标志执行了替换,则还会再次输出。删除p标志以避免再次打印替换行,或将-n参数提供给sed以避免打印每一行。

sed -n 's/pattern/replacement/p'  # print only lines where replacement happened

sed 's/pattern/replacement/'      # print all lines, possibly with replacements