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
où 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 }