我有一个名为 helo.lst 的巨大文本文件,其中每一行都以以下格式开头:
#=GS N4TFW2_FUSC1/96-161 AC N4TFW21
我只对这N4TFW2_FUSC1
部分感兴趣。我需要从文本的其余部分中提取这部分并将其应用于整个文本文件。
我发现以下脚本可以工作,但我不知道如何工作。
cat helo.lst | sed 's/^#=GS\s\([A-Z0-9_]*\)\/.*/\1/1' > helo_id.lst
有人可以解释一下之后发生了什么吗s/
例如,据我所知,更改文件中sed 's/Mark/Euro/g' de_currency.txt
每次出现的Mark
with 。但在我的示例中,脚本看起来比这更复杂。Euro
de_currency.txt
答案1
根据 sed 语法:
/原始/替换/1次
分解原来的
^ 行首
#=要搜索的GS字符串
\s 空格
( ) \ 从 ( 中获取含义,如 shell 中使用的那样;() 表示要在替换部分(分组)中替换的变量
[A-Z0-9_] [] 代表一个字符,可以是 A 到 Z、0 到 9、_
* 表示0次或多次
\/ 因为\是从shell中获取它的含义,它代表以“/”结尾的字符串
.* 消耗/匹配其他所有内容直到行尾
分解替代
\1 原始字符串中的第一个字符串正则表达式匹配(变量)(反向引用[分组])
警告:这是 GNU sed 语法。如果在 OS/X 或 *BSD 中,则必须使用 gsed
有关高级示例的 sed 文章链接:
http://www.thegeekstuff.com/2009/10/unix-sed-tutorial-advanced-sed-substitution-examples/