假设我有一个这样的文件:
foo bar foo bar foo bar foo bar something useful"foo bar foo bar"
基本上,我想知道如何单独获取字符串something useful
,将其保存到自己的文件中或单独显示为输出。
something useful
前面和"
后面总是有相同数量的字符 (33) 。
答案1
尝试这个:
cut -c 34- | cut -d '"' -f1
首先cut
删除前33个字符;第二个cut
仅保留第一个之前的部分"
。
答案2
这是grep
使用 perl 语法的 GNU 版本:
grep -oP '.{32}\K[^"]*'
它会 grep 前 32 个字符,将其删除\K
并打印其余的字符,直到 first "
。
答案3
在bash和参数扩展表达式中
$ nline="${line%%\"*}" #strip everything from first " seen to the end
$ echo "${nline:32}" #print everything from offset 32 to the end
答案4
您可以使用 sed 来完成您的任务
sed -e 's/^.\{32\}//;s/".*//' filename.txt
这将删除前 32 个字符并删除第一个 后的所有内容"
。
这些替换将发生在文件的每一行上。要将其应用于特定行,请使用:
sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt
其中linenumber
是任意数字。
linenumber{ # on the linenumber-th line, do the following
s/^.\{32\}// # remove the first 33 characters
s/".*// # remove the first quote and everything following it
}