Grep

如何正確重定向標準輸出以將不帶註釋的文件傳遞給 pacman 輸入

  • February 20, 2021

我有一個包含以下內容的簡單文件:

# programming 
python
python-pip
perl
# web
firefox
firefox-i18n-es-es

此範例的文件名將是file. 我通常使用這些包含pacman. 以這樣的方式,我將它傳遞給命令:

pacman -Sy --noconfirm $(<file)

我通常不在此文件中使用註釋,但我開始看到對它們的需求。沒有註釋 ( #) 可以正常工作,但使用它們將它們提取為要安裝的包:

$ pacman -S $(<file)
[sudo] password for user: 
error: no se ha encontrado el paquete: #
error: no se ha encontrado el paquete: programming
advertencia: python-3.9.1-2 está actualizado -- reinstalándolo
advertencia: python-pip-20.3.1-1 está actualizado -- reinstalándolo
advertencia: perl-5.32.1-1 está actualizado -- reinstalándolo
error: no se ha encontrado el paquete: #
error: no se ha encontrado el paquete: web
advertencia: firefox-85.0.2-1 está actualizado -- reinstalándolo
advertencia: firefox-i18n-es-es-85.0.2-1 está actualizado -- reinstalándolo

我試圖在stdout沒有註釋行的情況下進行操作:

$ cat file | grep -v '^#'
python
python-pip
perl
firefox
firefox-i18n-es-es

但我不知道如何結合一切:

$ pacman -S $(< $(cat file | grep -v '^#'))
-bash: $(cat file | grep -v '^#'): redireccionamiento ambiguo (ambiguous redirection)
error: no se especificaron objetivos (use -h para ayuda)

我怎麼能把它結合起來?

pacman -S $(grep -v '^#' file)

這假設對pacman -S $(<file)沒有註釋的文件執行您想要的操作,例如使用printf而不是pacman

$ printf '<%s>\n' $(<file)
<#>
<programming>
<python>
<python-pip>
<perl>
<#>
<web>
<firefox>
<firefox-i18n-es-es>

$ printf '<%s>\n' $(grep -v '^#' file)
<python>
<python-pip>
<perl>
<firefox>
<firefox-i18n-es-es>

xargs可以幫助你:

grep -v "^#" file.txt | xargs -I{} apt search --names-only {}

注意我使用apt,但你可以用pacman.

引用自:https://unix.stackexchange.com/questions/635532