gpt4 book ai didi

linux - 文本格式化 - sed、awk、shell

转载 作者:塔克拉玛干 更新时间:2023-11-02 23:24:26 27 4
gpt4 key购买 nike

我需要一些帮助来尝试使用文件中的排除列表构建变量。

所以我有一个用于 rsync 的排除文件,如下所示:

*.log
*.out
*.csv
logs
shared
tracing
jdk*
8.6_Code
rpsupport
dbarchive
inarchive
comms
PR116PICL
**/lost+found*/
dlxwhsr*
regression
tmp
working
investigation
Investigation
dcsserver_weblogic_
dcswebrdtEAR_weblogic_

我需要建立一个字符串,用作输入 egrep -v 的变量,这样我就可以对 rsync 使用相同的排除列表,就像我在 find -ls 中执行 egrep -v 时所做的那样。

到目前为止,我已经创建了这个来删除所有“*”和“/”——然后当它看到某些特殊字符时,它会转义它们:

cat exclude-list.supt | while read line
do
echo $line | sed 's/\*//g' | sed 's/\///g' | 's/\([.-+_]\)/\\\1/g'

我需要的输出也是这样的,然后将其导出为变量:

SEXCLUDE_supt="\.log|\.out|\.csv|logs|shared|PR116PICL|tracing|lost\+found|jdk|8\.6\_Code|rpsupport|dbarchive|inarchive|comms|dlxwhsr|regression|tmp|working|investigation|Investigation|dcsserver\_weblogic\_|dcswebrdtEAR\_weblogic\_"

有人能帮忙吗?

最佳答案

以下几个问题:

cat exclude-list.supt | while read line
do
echo $line | sed 's/\*//g' | sed 's/\///g' | 's/\([.-+_]\)/\\\1/g'

Sed 逐行读取文件,所以 cat |读行时;做 echo $line | sed 是完全多余的 sed 也可以通过将它们作为逗号分隔列表传递或使用 -e 选项进行多次替换,以便管道传输到 sed 三倍太多了。 '[.-+_]' 的一个问题是 - 位于 .+ 之间,因此它被解释为范围 。 -+ 在字符类中使用 - 时,将其放在末尾 beginning 或 end 以失去此含义,如 [._+-]

更好的方法:

$ sed -e 's/[*/]//g' -e 's/\([._+-]\)/\\\1/g' file
\.log
\.out
\.csv
logs
shared
tracing
jdk
8\.6\_Code
rpsupport
dbarchive
inarchive
comms
PR116PICL
lost\+found
dlxwhsr
regression
tmp
working
investigation
Investigation
dcsserver\_weblogic\_
dcswebrdtEAR\_weblogic\_

现在我们可以通过 tr '\n' '|' 将换行符替换为管道,以便为 egrep 做好准备:

$ sed -e 's/[*/]//g' -e 's/\([._+-]\)/\\\1/g' file | tr "\n" "|"
\.log|\.out|\.csv|logs|shared|tracing|jdk|8\.6\_Code|rpsupport|dbarchive|...

$ EXCLUDE=$(sed -e 's/[*/]//g' -e 's/\([._+-]\)/\\\1/g' file | tr "\n" "|")

$ echo $EXCLUDE
\.log|\.out|\.csv|logs|shared|tracing|jdk|8\.6\_Code|rpsupport|dbarchive|...

注意:如果您的文件以换行符结尾,您需要删除最后的尾随 |,请尝试 sed 's/\(.*\)|/\1/'

关于linux - 文本格式化 - sed、awk、shell,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14579349/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com