我正在为一个任务写一个基本的find命令(不使用find )。 现在我有一些我想要exec的文件。 语法如下所示: -exec /bin/mv {} ~/.TRASH 我有一个名为current的数组来保存所有的文件。 我的数组只保存/bin/mv , {}和~/.TRASH (因为我将-exec移出),并且存在一个名为arguments的数组中。 我需要它,以便每个文件都被传递给{}然后调用exec。 我想我应该使用sed来replace{}的内容(在for循环中): for i in "${current[@]}"; do sed "s@$i@{}" #exec stuff? done 我如何执行其他论据?
专家,我在这里有一个非常基本的要求来处理一个string,即我想用空格字符replacestring中除第一个以外的所有字符: 我知道要取代所有这些,我可以这样做: $ echo "abc,def,ghi,jkl" | sed 's/,/ /g' abc def ghi jkl 要只取代其中的第一个,我可以这样做: $ echo "abc,def,ghi,jkl" | sed 's/,/ /1' abc def,ghi,jkl 但是我怎样才能取代第一个“,”? 也就是说,所需的输出是: abc,def ghi jkl
我有一个给定的文件: application_1.pp application_2.pp #application_2_version => '1.0.0.1-r1', application_2_version => '1.0.0.2-r3', application_3.pp #application_3_version => '2.0.0.1-r4', application_3_version => '2.0.0.2-r7', application_4.pp application_5.pp #application_5_version => '3.0.0.1-r8', application_5_version => '3.0.0.2-r9', 我希望能够阅读这个文件并searchstring ".pp" 当find该string时,会将该行添加到variables中并存储它。 然后读取文件的下一行。 如果遇到以#开头的行,它会忽略它并移到下一行。 如果遇到不包含“.pp”且不以“#”开头的行,则应在新文件中将最后一个存储variables旁边的行打印出来。 输出结果如下所示: application_1.pp application_2.pp application_2_version => '1.0.0.2-r3', application_3.pp application_3_version => '2.0.0.2-r7', application_4.pp application_5.pp application_5_version => '3.0.0.2-r9', 我想用awk来实现这个。 如果有人知道如何做到这一点,这是一个简单的解决scheme,我会很高兴,如果他们可以与我分享。 如果它更复杂,知道awk中需要了解的内容(数组,variables等)会有帮助。 它甚至可以用awk实现,还是另一个必要的工具? 谢谢,
我有这样的模板文件 $ cat template.txt QWERTY ~SQL~ ASDFG 我需要用下面的文本replace模板文件中的"~SQL~" 〜SQL〜 "~SQL~"string。 这个文本存储在一个variables中 SELECT COL1, COL2, COL3 FROM TABLE; 我尝试了下面的代码,但得到一个错误: sed:-eexpression式#1,字符20:未终止的's'命令 $ query='SELECT COL1, > COL2, > COL3 > FROM TABLE;' $ $ sed "s/~SQL~/$query/" template.txt sed: -e expression #1, char 20: unterminated `s' command 如果我从"query"删除新的行,那么sed命令可以正常工作 $ query='SELECT COL1, COL2, COL3 FROM TABLE;' $ sed "s/~SQL~/$query/" template.txt […]
文件包含以下几行: UserName aashii UserName drisha UserName aashii UserName harsha UserName sampada <Anonymous> UserName drisha UserName aashii </Anonymous> 我想从unix文件中删除具有string"UserName aashii"的行,而不删除具有<Anonymous>….</Anonymous>部分下的string"UserName aashii"的行。 我试过这个命令: sed -i '/^ *UserName *aashii *$/d' -i $file 但是,它删除了所有包含string的行,甚至包含<Anonymous>…..</Anonymous>部分下的string的行
我有一个Makefile,它有一行: sed -i -e 's/\(^COPTS = \)/\1$(CFLAGS) /' $(DIR)/Makefile 在将值代入之后: sed -i -e 's/\(^COPTS = \)/\1"-I/home/jagadeesh/Smoothwall/bcutm/distrib/tools//powerpc-linux/include -I/home/jagadeesh/Smoothwall/bcutm/distrib/usr/include/ncurses -I/home/jagadeesh/Smoothwall/bcutm/distrib/usr/include" /' net-tools-1.60/Makefile make运行时会出现以下错误: sed: -e expression #1, char 23: unknown option to `s' 这个sed命令要运行的net-tool-1.60 / Makefile包含以下相关行: COPTS = -D_GNU_SOURCE -O2 -Wall -g # -I/usr/inet6/include CFLAGS = $(COPTS) -I. -idirafter ./include/ -I$(NET_LIB_PATH) MDEFINES = COPTS='$(COPTS)' LOPTS='$(LOPTS)' TOPDIR='$(TOPDIR)' 这个命令做了什么,Makefile的哪一行,为什么会出现错误,除了我自定义的CFLAGS和LDFLAGS,我没有修改任何东西。
我有名为test_images的文件夹列表如下 006103insettedryshampoo-blossom7096.jpg 008299bathmassagesponges-3packa1a4.jpg 008507colgatetripleactiontoothpaste125d.jpg 8729teatreeoilantisepticcream25g1005.jpg 我想通过从每个文件中删除最后四个字符来重命名所有文件 006103insettedryshampoo-blossom.jpg 008299bathmassagesponges-3pack.jpg 008507colgatetripleactiontoothpaste.jpg 8729teatreeoilantisepticcream25g.jpg 我怎样才能使用sed? 任何build议将不胜感激。 提前致谢 :)
只有连字号后面跟2个以上的数字才能删除连字符? input: 101|9881|Customer contact on 12-01-2015|AXD 102|9882|Declined sales. 122-333-1234 contact|XYZ 输出: 101|9881|Customer contact on 12-01-2015|AXD 102|9882|Declined sales. 1223331234 contact|XYZ 我用过这个… sed 's/([0-9])-([0-9])/\1\2/g' inputfile 但它会replace所有带连字号的连字符。 请帮忙吗?
我在我的任务中尝试过,但似乎没有工作 – name: Fix line endings from CRLF to LF local_action: replace dest={{my_dir}}/conf/{{item}} regexp='\r\n' replace='\n' 我通常这样使用sed如下,它的工作原理 sed -i 's/\r//g' file 我想避免使用shell模块来做这个replace,因为它会引发一个警告
假设我有两个bash历史文件,如下所示: history1.txt : 1 ls 2 cd foo … 921 history > history1.txt history2.txt : 154 vim /etc/nginx/nginx.conf 155 service nginx restart … 1153 history > history2.txt 我知道我可以很容易地写一个bash脚本来合并这两个文件在一起,以便生成的文件包含行1到1153没有重复的历史条目…像下面的bash脚本: merge.sh HEAD=`head -n 1 history2.txt | sed -e 's/^[[:space:]]*//'` sed -n -e "1,/$HEAD/p" history1.txt > merged.txt sed -e "1,$ s/$HEAD//" -e '/^\s*$/d' history2.txt >> merged.txt 但我花了更多的时间比我想承认试图find一种方法来完成这个只使用未命名的pipe道,sed和/或任何其他常见的Linux utils […]