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

时间:2018-10-02 15:11:17

标签: bash git-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

有人帮我吗? 谢谢!

6 个答案:

答案 0 :(得分:2)

此awk单线将完成此工作:

awk -F'#.*' '$1&&$0="pacman -S "$1' file

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

pacman -S package1 package2 package3...

答案 1 :(得分:1)

尝试一下。这将输出到stdout:

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

这将输出到一个新文件:

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

答案 2 :(得分:0)

尝试一下

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

希望这会有所帮助

答案 3 :(得分:0)

首先删除所有以<listener> <listener-class>org.jboss.weld.environment.servlet.Listener</listener-class> </listener> 开头的行

repositories {
    ['<url1>', '<url2>'].each { u ->
        maven {
            url u
            credentials {
                username = "<username>"
                password = "<password>"
            }
        }
    }
}

现在,每行前面有concat #

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

希望这对您有帮助

答案 4 :(得分:0)

sed

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

说明:
sed -n除非指定,否则不打印
s/#.*//从“#”中删除所有内容
/./ ... /p仅打印至少在char左边的行
s/^/pacman -S /在行首插入“ pacman -S”

答案 5 :(得分:0)

pacman -Qqen > pkglist.txt

要安装:

pacman -S - < pkglist.txt

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