如何从文件中逐行获取并在 bash 上的 # 之前剪切字符串

How to get line by line from file and cut string before # on the bash

我有文件及其内容:

gnome-tweak-tool #(Cinnamon does not support)
gnome-system-monitor
gnome-calculator
gedit
nomacs gimp #(viewer and editor for image)
#aa
#bb

与 "pacman" 的命令合并后。 我想要这样的输出:

pacman -S gnome-tweak-tool 
pacman -S gnome-system-monitor
pacman -S gnome-calculator
pacman -S gedit
pacman -S nomacs gimp

有人帮我吗? 谢谢!

试试这个。这将输出到标准输出:

awk -F# '{print }' file | awk 'NF' | sed -e 's/^/pacman -S /'

这将输出到一个新文件:

awk -F# '{print }' file | awk 'NF' | sed -e 's/^/pacman -S /' > file2

这个 awk 一行就可以完成这项工作:

awk -F'#.*' '&&[=10=]="pacman -S "' file

请注意,pacman 接受多个包,例如:

pacman -S package1 package2 package3...

试试这个

sed -e 's/#.*$//' test.in | awk '{if (NF != 0) {printf("pacman -S %s\n", [=10=])} else {print [=10=]}}'

希望对您有所帮助

首先删除所有以#

开头的行
 sed 's/#.*//g;/^$/d' file1.txt > tmp.txt

现在在每行前面连接pacman -S

awk '{print "pacman -S " [=11=];}' tmp.txt > file1.txt

希望对您有所帮助

sed:

sed -n 's/#.*//; /./ s/^/pacman -S /p' inputfile

解释:
sed -n 除非指定,否则不打印
s/#.*// 删除“#”中的所有内容
/./ ... /p 只打印至少剩下一个字符的行
s/^/pacman -S / 在行首插入 "pacman -S"

pacman -Qqen > pkglist.txt

要安装:

pacman -S - < pkglist.txt

来自 ArchWiki:https://wiki.archlinux.org/index.php/Pacman/Tips_and_tricks#List_of_installed_packages