Frage

Ich versuche, führen Sie die folgenden Befehle:

replace -x "must " A2input.txt
replace -x " a" -f -s ## A2input.txt
replace -x to -s ## -a A2input.txt
replace -x faith -f "unequivocal" A2input.txt

Und es wäre schön, wenn ich nur könnte verwenden Sie einen alias, um so etwas kurz und einfach wie "a", "b", "c", "d", etc...

Jedoch, einige dieser Argumente habe hier ein Zitat, das Durcheinander des Pseudonyms gestattet.Weiß jemand, wie man tatsächlich die Flucht der Anführungszeichen?Ich habe versucht, Dinge wie " \ "" und \", aber nichts scheint zu funktionieren.

Ich bin mit tcsh als meine Schale.

War es hilfreich?

Lösung

Ich habe es funktioniert, indem die Zeichenfolge mit doppelten Anführungszeichen in einer variable, die mit der Zeichenfolge in einfache Anführungszeichen gesetzt.Wenn ich die variable, die ich bis in einfachen Anführungszeichen.
Beispiel:

[11:~] phi% 
[11:~] phi% set text = 'a quote "'
[11:~] phi% alias ec echo '$text'
[11:~] phi% ec
a quote "
[11:~] phi% 
[11:~] phi% alias ec echo this has '$text'
[11:~] phi% ec
this has a quote "
[11:~] phi% 

Getestet habe ich diese mit tcsh auf OSX

Andere Tipps

Die folgenden arbeiten alle in tcsh zu erreichen verschiedene Ergebnisse:

alias t echo hello world                # you may not actually need any quotes
alias u 'echo "hello world"'            # nested quotes of different types
alias v echo\ \"hello\ world\"          # escape everything
alias w echo '\;'hello'";"' world       # quote/escape problem areas only
alias x 'echo \"hello world\"'          # single quote and escape for literal "
alias y "echo "\""hello world"\"        # unquote, escaped quote, quote ("\"")
alias z 'echo '\''hello world'\'        # same goes for single quotes ('\'')

Um zu sehen, wie diese werden von der shell interpretiert, ausgeführt alias ohne Argumente:

% alias
t       (echo hello world)
u       echo "hello world"
v       echo "hello world"
w       (echo \;hello";" world)
x       echo \"hello world\"
y       echo "hello world"
z       echo 'hello world'

Alles, was in Klammern gesetzt ist, laufen in einer subshell.Dies wäre schlecht, wenn Sie versuchen, Umgebungsvariablen, aber weitgehend irrelevant, sonst.

Schließlich, hier ist, was die Beispiele, die Sie tatsächlich tun:

% t; u; v; w; x; y; z
hello world
hello world
hello world
;hello; world
"hello world"
hello world
hello world

tcsh eine neuere variable backslash_quote.Nicht sicher, wenn es Hinzugefügt wurde, aber es ist unterstützt 6.18.01 (version auf OS X El Capitan) und 6.19 (neueste stabile Version zur Zeit des Schreibens).Dies macht es möglich, zu entkommen ', ", und ` innerhalb der Anführungszeichen.

set backslash_quote

set sentence = 'I\'m a little teapot.'
set sentence2 = "The man said \"hello\""

Wenn Sie nicht wollen, um diese option zu verwenden, Ihre Entscheidungen sind begrenzt, um eine andere zitieren, um das symbol

"The man said "'"'"hello"'"'

oder nicht mit Anführungszeichen und liberal backslashing Dinge.

The\ man\ said\ \"hello\"

Wenn Sie nicht bekommen kann einen alias zu arbeiten, schreibt einfach einen kurzen shell-Skript mit chmod +x, und legen Sie Sie irgendwo in Ihrem $PATH (wie $HOME/bin):

#!/bin/tcsh
replace -x "must" ...

Ich habe keine Erfahrung mit tcsh, aber mit bash-Sie tun es wie die folgenden:

alias t='echo "hello  world"'     # using single quotes to enclose entire string
alias t=echo\ \"hello\ \ world\"  # escape " and <space>
alias t="echo \"hello  world\""   # double-quote + escape inner double quotes

Vielleicht etwas ähnliches werden in tcsh?

Es scheint, dass der Grund, dass \" und \' nicht so funktionieren, wie Sie erwarten, ist, dass csh traditionell trifft nicht unterstützen, wie syntax, so dass, wenn tcsh waren bedingungslos unterstützen, dann solche ältere Skripte können nicht mehr richtig funktionieren.

Wie bereits erwähnt in einer anderen Antwort, tcsh selbst hat die set backslash_quote Funktion;jedoch, im Gegensatz implizit in der Antwort erwähnt, ist dies kaum eine neue Funktion, es ist nur eine tcsh-spezifische, und tatsächlich wurde Hinzugefügt tcsh mindestens einige vor 27 Jahren — das feature wurde erstmals dokumentiert im Handbuch-Seite tcsh.man,v 3.8 1991/07/25 04:50:55, die kaum qualifiziert es als "neu".

http://mdoc.su/n,f -, d - /tcsh.1

backslash_quote (+)
       If set, backslashes (`\') always quote `\', `'', and `"'.  This
       may  make complex quoting tasks easier, but it can cause syntax
       errors in csh(1) scripts.
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top