提取路径的一部分

时间:2016-06-06 04:26:11

标签: linux shell awk sed

我有一个变量,它是一个windows文件夹的路径。

我想用SED处理方式。

示例:

输入:

\\computer1\folder$

输出:

computer1

我总是会选择介于\\和\

之间的主机名

有人可以给我一个灯吗?

4 个答案:

答案 0 :(得分:1)

您可以在兼容POSIX的shell中执行此操作:

% folder='\\computer1\folder$'
% folder="${folder/\\\\/}" # Remove leading '\\'
% printf "%s\n" "${folder%%\\*}"
computer1

替代Bashism:

% folder='\\computer1\folder$'
% [[ "$folder" =~ '\\'([^\\]*) ]]
% printf "%s\n" "${BASH_REMATCH[1]}"
computer1

答案 1 :(得分:0)

对于这种情况,awk是更好的选择。使用awk -F'\' '{print $2}'

实施例

$> echo "\\computer1\folder$"|awk -F'\' '{print $2}'

输出

computer1

或者您可以尝试使用变量。

$> export val="\\computer1\folder$"

$> echo $val|awk -F'\' '{print $2}'
computer1

答案 2 :(得分:0)

使用sed:

$ sed 's/\\\\\([^\]*\)\\.*/\1/' <<< '\\computer1\folder$'
computer1

sed substitution命令的基本语法是s/oldtext/newtext/

  • s用于替换命令
  • 路径字符串中的
  • ,必须对每个\进行转义,以使其成为\\
  • \([^\]*\)\会捕获每个非\个字符,直到下一个\
  • 使用反向引用\1
  • 输出捕获的字符串

答案 3 :(得分:0)

用awk。 s代表“分隔符”,a代表“any”。

echo '\\computer1\folder$' | \
awk '{s="\\\\"; a=".*"; sub(a s s, ""); sub(s a, ""); print}'