Передача переменной в команду sed
Мне нужно передать значение переменной в команду sed. вот описание, что я делаю.
я присваиваю значение переменной:
export ALSIZE=14420
$ echo $ALSIZE
14420
теперь я использую это значение в команде sed для чтения файла из строки $ALSIZE до конца файла. и я получил ошибку
$ sed -n '$ALSIZE,$p' /db1/u04/oradata/GG11/ggserr.log
Unrecognized command: $ALSIZE,$p ====== >>
использовал значение переменной в "" (двойные кавычки) все равно получил ошибку.
$ sed -n '"$ALSIZE",$p' /db1/u04/oradata/GG11/ggserr.log
Unrecognized command: "$ALSIZE",$p ===== >>>
я получаю ответ
$ sed -n '14420,$p' /db1/u04/oradata/GG11/ggserr.log
2013-12-26 06:36:17 INFO OGG-01026 Oracle GoldenGate Capture for Oracle, dpsbprd.prm: Rolling over remote file ./dirdat/siebel/r1003911.
2013-12-26 06:43:31 INFO OGG-01026 Oracle GoldenGate Capture for Oracle, dpsbprd.prm: Rolling over remote file ./dirdat/siebel/r1003912.
2013-12-26 11:07:47 INFO OGG-01026 Oracle GoldenGate Capture for Oracle, dpsbprd.prm: Rolling over remote file ./dirdat/siebel/r1003913.
какая ошибка я делаю Не могли бы вы, пожалуйста, совет?
3 ответа
Все это будет работать:
sed -n $ALSIZE',$p' /db1/u04/oradata/GG11/ggserr.log
sed -n "$ALSIZE"',$p' /db1/u04/oradata/GG11/ggserr.log
sed -n "$ALSIZE,\$p" /db1/u04/oradata/GG11/ggserr.log
Ключ к пониманию того, как работает цитирование:
- Вы можете указать часть строки или все:
hello
,hel'lo'
,'hello'
,'hel''lo'
все одинаковы с оболочкой - Переменные оболочки в двойных кавычках расширяются до их значения:
"$ALSIZE"
расширен до"14420"
, который не нужно заключать в кавычки, чтобы вы могли написать просто$ALSIZE
без цитирования - Переменные оболочки в одинарных кавычках не раскрываются, поэтому
'$ALSIZE'
будет использоваться буквенный текст "$ALSIZE", который не является тем, что вы хотите - в
"$ALSIZE,\$p"
пример второй$
необходимо избежать, чтобы предотвратить расширение оболочки$p
переменная, которая, вероятно, не имеет значения
Одинарные кавычки означают, что "$" в $ALSIZE раскрывается как литерал "\$ALSIZE". Что произойдет, если переписать это на:
sed -n $ALSIZE',$p' /db1/u04/oradata/GG11/ggserr.log
(оставляя одинарные кавычки до переменной $ALSIZE)?
Используйте двойные кавычки:
kent$ s=5
kent$ seq 10 |sed -n "$s,$ p"
5
6
7
8
9
10