Bash

嘗試從文件中執行 grep 和 sed 並將輸出推送到變數中

  • May 24, 2017

我們可以從文件中執行 grep 和 sed 並將輸出推送到變數中嗎

grep "^/dev/disk/by-id/scsi-*" /tmp/disks.txt | sed '{'s/=.*//'}'

輸出將是這樣的:

/dev/disk/by-id/scsi-3644a8420420897001f2af8cc054d33bb
/dev/disk/by-id/scsi-3644a8420420897001ef50fcb0f778b86-part3
/dev/disk/by-id/scsi-3644a8420420897001ef50fcb0f778b86-part2

錯誤:

[/~]# grep "^/dev/disk/by-id/scsi-*" /tmp/disks.txt | sed {'s/=.*//'} >> $x
-bash: $x: ambiguous redirect

我們可以將所有 3 行都推入一個變數並用 foreach 呼叫它們嗎?謝謝!

我已經測試過,以下都在 bash shell 中工作:

x=`grep "^/dev/disk/by-id/scsi-*" /tmp/disks.txt | sed {'s/=.*//'}`
x=$(grep "^/dev/disk/by-id/scsi-*" /tmp/disks.txt | sed {'s/=.*//'})

注意第一行是反引號,而不是單引號。

您問題中的 >> 字元將輸出發送到文件,而不是變數。

要回答第二部分,是的,使用上面的輸出,for 循環可以工作:

for line in $x 
do
 echo $line
done

引用自:https://serverfault.com/questions/851919