Lire d'un certain point à un certain caractère

Disons que j'ai un file comme celui-ci:

foo bar foo bar foo bar foo bar something useful"foo bar foo bar" 

Fondamentalement, je veux savoir comment je peux get la string something useful par elle-même, soit enregistré dans son propre file ou affiché en tant que sortie seule.

Il y aura toujours le même nombre de caractères (33) avant something useful et il y aura toujours " directement après».

Essaye ça:

 cut -c 34- | cut -d '"' -f1 

La première cut enlève les 33 premiers caractères; la deuxième cut ne garde que la partie avant la première " .

Voici la version GNU grep utilisant la syntaxe perl:

 grep -oP '.{32}\K[^"]*' 

il greps 32 premiers caractères, le coupe avec \K et imprime le rest jusqu'à la première " .

Une solution vim:

 vim test.txt -c '%s/\v.{32}(.{-})".*/\1' -c 'w output.txt' -c 'q!' 

Enregistre le résultat dans output.txt , qui pourrait évidemment être modifié.

En bash et l'expression d'expansion de paramètre

 $ nline="${line%%\"*}" #ssortingp everything from first " seen to the end $ echo "${nline:32}" #print everything from offset 32 to the end 

Vous pouvez utiliser sed pour accomplir votre tâche

 sed -e 's/^.\{32\}//;s/".*//' filename.txt 

Cela supprime les 32 premiers caractères et supprime tout après le premier " .

Ces substitutions auront lieu sur chaque ligne du file. Pour appliquer ceci à une ligne spécifique, utilisez ceci:

 sed -e 'linenumber{s/^.\{32\}//;s/".*//;}' filename.txt 

linenumber est un nombre quelconque.

 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 }