我需要使用sed命令删除两个“”

时间:2019-05-30 08:47:30

标签: bash awk sed

我需要删除文件中的""

"CITFFUSKD-E0"

我尝试过sed 's/\"//

结果是:

CITFFUSKD-E0"

如何删除两者?

我还需要删除第一个单词后面的所有内容,但输入可以是以下内容:

"CITFFUSKD-E0"
"CITFFUSKD_E0"
"CITFFUSKD E0"

我想要的结果:

CITFFUSKD

7 个答案:

答案 0 :(得分:1)

您可以使用

sed 's/"//g' file | sed 's/[^[:alnum:]].*//' > newfile

或者,将两个sed命令收缩为一个sed调用issue adjusting distance

sed 's/"//g;s/[^[:alnum:]].*//' file > newfile

如果要替换内联,请参见as @Wiimm suggests

说明

  • sed 's/"//g' file-从文件中删除所有"个字符
  • sed 's/[^[:alnum:]].*//' > newfile-还将从第一个非字母数字字符开始的行中删除所有字符,并将结果保存到newfile中。

答案 1 :(得分:0)

请您尝试以下。

awk 'match($0,/[a-zA-Z]+[^a-zA-Z]*/){val=substr($0,RSTART,RLENGTH);gsub(/[^a-zA-Z]+/,"",val);print val}' Input_file

答案 2 :(得分:0)

  

删除第一个单词后面的所有内容

sed 's/^"\([[:alpha:]]*\)[^[:alpha:]]*.*/\1/'

匹配第一个"。然后匹配一系列字母字符。匹配直到找到非字母字符^[:alpha:]。然后匹配其余部分。将其全部替换为\1-它是\( ... \)内部部分的后向引用,即。第一个字。

  

我需要使用sed命令删除两个“”

删除所有可能的"

sed 's/"//g'

提取"之间的字符串:

sed 's/"\([^"]*\)"/\1/'

删除除字母数字字符(数字+ a-z + a-Z,即[0-9a-zA-z])以外的所有内容:

sed 's/[^[:alnum:]]//g'

答案 3 :(得分:0)

这应该一次性完成,删除",打印第一部分:

awk -F\" '{split($2,a,"-| |_");print a[1]}' file
CITFFUSKD
CITFFUSKD
CITFFUSKD

答案 4 :(得分:0)

只有1行时,您可以使用

grep -Eo "(\w)*" file | head -1

对于普通文件(每行以双引号开头) ,试试这个

tr -c [^[:alnum:]] '"' < file | cut -d'"' -f2

答案 5 :(得分:0)

许多合法方法可以解决此问题。

我倾向于使用对数据的了解来简化解决方案-这通常是一种选择。如果文件中的所有内容都遵循相同的模式,则只需提取遇到的第一组大写字母:

sed 's/"\([A-Z]\+\).*$/\1/' file

答案 6 :(得分:0)

awk'{gsub(/ ^。| .... $ /,“”)} NR == 1'文件

CITFFUSKD