2

我正在寻找从路径中删除字段的最简单和最易读的方法。例如,我有 /this/is/my/complicated/path/here,我想使用 bash 命令从字符串中删除第 5 个字段(“/complicated”),使其变为 /this/is /我自己的路。我可以这样做

echo "/this/is/my/complicated/path/here" | cut -d/ -f-4
echo "/"
echo "/this/is/my/complicated/path/here" | cut -d/ -f6-

但我希望只用一个简单的命令就可以完成这件事

echo "/this/is/my/complicated/path" | tee >(cut -d/ -f-4) >(cut -d/ -f6-)

除了这不起作用。

4

4 回答 4

4

使用cut,您可以指定以逗号分隔的要打印的字段列表:

$ echo "/this/is/my/complicated/path/here" | cut -d/ -f-4,6-
/this/is/my/path/here

因此,实际上没有必要使用两个命令。

于 2012-04-25T14:21:07.563 回答
0

使用 sed 怎么样?

$ echo "/this/is/my/complicated/path/here" | sed -e "s%complicated/%%"
/this/is/my/path/here
于 2012-04-25T14:10:25.213 回答
0

这将删除第 5 个路径元素

echo "/this/is/my/complicated/path/here" | 
  perl -F/ -lane 'splice @F,4,1; print join("/", @F)'

只是猛击

IFS=/ read -a dirs <<< "/this/is/my/complicated/path/here"
newpath=$(IFS=/; echo "${dirs[*]:0:4} ${dirs[*]:5}")
于 2012-04-25T14:30:23.573 回答
0

bash 脚本有什么问题吗?

#!/bin/bash        

if [ -z "$1" ]; then 
    us=$(echo $0 | sed "s/^\.\///") # Get rid of a starting ./
    echo "        "Usage: $us StringToParse [delimiterChar] [start] [end]
    echo StringToParse: string to remove something from. Required
    echo delimiterChar: Character to mark the columns "(default '/')"
    echo "        "start: starting column to cut "(default 5)"
    echo "          "end: last column to cut "(default 5)"
    exit
fi


# Parse the parameters
theString=$1
if [ -z "$2" ]; then
    delim=/
    start=4
    end=6
else
    delim=$2
    if [ -z "$3" ]; then
        start=4
        end=6
    else
        start=`expr $3 - 1`
        if [ -z "$4" ]; then
            end=6
        else
            end=`expr $4 + 1`
        fi
    fi
fi

result=`echo $theString | cut -d$delim -f-$start`
result=$result$delim
final=`echo $theString | cut -d$delim -f$end-`
result=$result$final
echo $result
于 2012-04-25T15:03:24.937 回答