从某个点读到某个字符

从某个点读到某个字符

假设我有一个这样的文件:

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
}

相关内容