如何用sed命令删除文件双引号并提取首个单词前缀?
解决你的两个sed文本处理问题
嘿,让我们一步步搞定你遇到的sed问题:
1. 删除文件中所有双引号
你之前用的sed 's/"//'只替换了每行第一个双引号,这是因为sed的替换默认只处理每行的首次匹配。要删除所有双引号,需要加上全局替换标志g:
sed 's/"//g' CITFFUSKD-E0
如果想要直接修改原文件(原地编辑),可以加上-i参数(注意:BSD/macOS系统的sed需要写成sed -i '' 's/"//g' CITFFUSKD-E0):
# Linux系统 sed -i 's/"//g' CITFFUSKD-E0 # macOS/BSD系统 sed -i '' 's/"//g' CITFFUSKD-E0
这个命令会遍历文件的每一行,把所有双引号都替换为空(也就是删除)。
2. 删除首个单词后的所有内容
看你的示例,不管分隔符是-、_还是空格,都要保留开头的CITFFUSKD部分。这里可以用两种思路:
方法一:匹配首个非字母数字字符及后续内容删除
这个方法最通用,不管分隔符是什么,只要是第一个非字母数字的字符,就删掉它和后面的所有内容:
sed 's/[^[:alnum:]].*//' 你的文件名
解释:
[^[:alnum:]]:匹配第一个非字母(a-z/A-Z)或数字(0-9)的字符.*:匹配该字符后面的所有内容- 替换为空字符串,就只剩下开头的连续字母数字部分
方法二:指定分隔符删除
如果你确定分隔符只有-、_、空格这几种,可以直接匹配这些字符及后续内容:
sed 's/[-_ ].*//' 你的文件名
测试一下你的示例:
- 输入
"CITFFUSKD-E0"→ 输出CITFFUSKD - 输入
"CITFFUSKD_E0"→ 输出CITFFUSKD - 输入
"CITFFUSKD E0"→ 输出CITFFUSKD
完全符合你的需求!
内容的提问来源于stack exchange,提问作者sundrys1
相关产品推荐
相关产品推荐

