bash - lunghezza - sed linux



Come posso rimuovere tutto il testo dopo un carattere in bash? (4)

Come posso rimuovere tutto il testo dopo un carattere, in questo caso i due punti (":"), in bash? Posso rimuovere anche i due punti? Non ho idea di come.


Answer #1

In Bash (e ksh, zsh, dash, ecc.), Puoi usare l'espansione dei parametri con % che rimuoverà i caratteri dalla fine della stringa o # che rimuoverà i caratteri dall'inizio della stringa. Se si utilizza uno solo di questi caratteri, verrà rimossa la stringa di corrispondenza più piccola. Se raddoppi il carattere, il più lungo sarà rimosso.

$ a='hello:world'
$ b=${a%:*}
$ echo "$b"
hello
$ a='hello:world:of:tomorrow'
$ echo "${a%:*}"
hello:world:of
$ echo "${a%%:*}"
hello
$ echo "${a#*:}"
world:of:tomorrow
$ echo "${a##*:}"
tomorrow

Answer #2

Supponiamo che tu abbia un percorso con un file in questo formato:

/dirA/dirB/dirC/filename.file

Ora vuoi solo il percorso che include quattro "/". genere

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-4 -d"/"

e il tuo risultato sarà

/dirA/dirB/dirC

Il vantaggio dell'uso di cut è che puoi anche ritagliare la directory più alta così come il file (in questo esempio), quindi se digiti

$ echo "/dirA/dirB/dirC/filename.file" | cut -f1-3 -d"/"

la tua produzione sarebbe

/dirA/dirB

Sebbene tu possa fare lo stesso dall'altra parte della stringa, non avrebbe molto senso in questo caso come la digitazione

$ echo "/dirA/dirB/dirC/filename.file" | cut -f2-4 -d"/"

risultati in

dirA/dirB/dirC

In alcuni altri casi potrebbe essere utile anche l'ultimo caso. Ricorda che non c'è "/" all'inizio dell'ultimo output.


Answer #3
$ echo 'hello:world:again' |sed 's/:.*//'
hello

Answer #4
egrep -o '^[^:]*:'




bash