Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Linux 如何在shell脚本中交换单词?_Linux_Shell_Sed - Fatal编程技术网

Linux 如何在shell脚本中交换单词?

Linux 如何在shell脚本中交换单词?,linux,shell,sed,Linux,Shell,Sed,这是我的输入行 [[ref:start |其他配置文件、程序和脚本]] 我需要将上面的行转换为 “其他配置文件、程序和脚本”:ref/start 如何使用sed命令转换此文件?写起来比读起来容易:) 我建议你读书也要读书。它没有那么大,你实际上不需要一次读完它。在大多数情况下,了解s///命令、正则表达式语法和sed标志(最有用的是-n和-i)就足够了。嗨,你能解释一下为什么我们需要部分[^:]*和[^ |]*?[^:]匹配一个不是冒号(或换行符)的字符吗和*匹配零个或多个,总是尽可能多。因此,

这是我的输入行
[[ref:start |其他配置文件、程序和脚本]]

我需要将上面的行转换为
“其他配置文件、程序和脚本”:ref/start


如何使用sed命令转换此文件?

写起来比读起来容易:)


我建议你读书也要读书。它没有那么大,你实际上不需要一次读完它。在大多数情况下,了解
s///
命令、正则表达式语法和sed标志(最有用的是
-n
-i
)就足够了。

嗨,你能解释一下为什么我们需要部分[^:]*和[^ |]*?
[^:]
匹配一个不是冒号(或换行符)的字符吗和
*
匹配零个或多个,总是尽可能多。因此,
[^::::]*
匹配到冒号分隔符之前。类似地,
[^ |]*
匹配到管道分隔符之前。如果在同一输入行上可能有多个表达式,则也应防止匹配超过右方括号,并添加一个
/g
选项<代码>sed的%\[\[\([^]:]*\):\([^]\]*\)\\([^]*\)\]\]\]%“\3”:\1/\2%g'
$ echo "[[ref:start|Other config files, programs, and scripts]]" |\
  sed 's/\[\[\([^:]*\):\([^|]*\)|\(.*\)\]\]/"\3":\1\/\2/'
"Other config files, programs, and scripts":ref/start