我需要打印我们生产系统的目录结构,我想从树中删除一些特定的目录?
我们如何为tree命令指定多个忽略模式?
我有一个.gitignore类似于以下内容的正则表达式:
(Big|Small)(State|City)-[0-9]*\.csv
Run Code Online (Sandbox Code Playgroud)
它不起作用,所以我针对RegexLab.NET对其进行了测试。
然后我找到了gitignore手册页,这让我了解到 gitignore 不使用正则表达式,而是使用fnmatch(3)。
但是, fnmatch 它似乎没有与捕获组等效的内容。这是可行的还是我需要把它分成三行?
请解释为什么最后四个echo语句显示1 4 5 6?我偶然碰到了一次,但我现在很好奇为什么会发生这种行为。
这些语句按预期工作(对我而言)。
$ echo [ 9876543210 ]
[ 9876543210 ]
$ echo [237890]
[237890]
Run Code Online (Sandbox Code Playgroud)
这些 echo 语句始终显示 1 4 5 6。这些数字有什么特别之处吗?
$ echo [9876543210]
1 4 5 6
$ echo [abcd9876543210ghi]
1 4 5 6
$ echo [-123456-]
1 4 5 6
$ echo [-7654321-]
1 4 5 6
Run Code Online (Sandbox Code Playgroud)
谢谢!
rm命令的角度来看的。这个问题是从echo命令的感知“奇怪行为”的角度来看的。两者的基本答案都是通配。搜索echo命令问题的人不会轻易找到rm问题,但更可能会在这里登陆。在 bash shell 中ls可以通过以下方式使用逻辑 OR 功能(当然我也可以这样做,ls name1 name2但我的真实示例更复杂):
ls @(name1|name2)
Run Code Online (Sandbox Code Playgroud)
有没有办法做到这一点find?
我天真的实现:
find . -maxdepth 1 -name @("name1"|"name2")
Run Code Online (Sandbox Code Playgroud)
不起作用(它只是不输出任何内容)
假设我有一个包含文件 a1、a2、a3、b1、b2、b3 的目录。我只想匹配开头a但不包含3. 我试过了,ls -I "*3" *a*但它返回a1 a2 a3,即使我不希望它匹配a3。这可能ls吗?
我正在尝试查找文件名中有换行符的文件。但我不知道使用什么模式。
以下有效,但如果我想在缩进代码中使用它,则不是很有用。
find . -name '*
*'
Run Code Online (Sandbox Code Playgroud)
我尝试了这两个,他们只成功找到了包含字母n 的文件名:
find . -name '*\n*'
find . -name "*\n*"
Run Code Online (Sandbox Code Playgroud)
然后我找到了如何编写反斜杠转义序列并尝试了这个:
find . -name "*$'\n'*"
Run Code Online (Sandbox Code Playgroud)
但这并没有找到任何东西。我应该如何写模式?
我想对目录中的子目录列表进行操作。考虑:
for x in x86-headers/*/C/populate.sh; do echo $x; done
Run Code Online (Sandbox Code Playgroud)
这给
x86-headers/elf/C/populate.sh
x86-headers/gl/C/populate.sh
x86-headers/gmp/C/populate.sh
x86-headers/gnome2/C/populate.sh
x86-headers/gtk2/C/populate.sh
x86-headers/jni/C/populate.sh
x86-headers/libc/C/populate.sh
Run Code Online (Sandbox Code Playgroud)
但我想要对应于路径第二部分的值
elf,gl, 等。我知道如何去除前导x86-headers.
for x in x86-headers/*/C/populate.sh; do i=${x##x86-headers/}; echo $i; done
Run Code Online (Sandbox Code Playgroud)
这使
elf/C/populate.sh
gl/C/populate.sh
gmp/C/populate.sh
gnome2/C/populate.sh
gtk2/C/populate.sh
jni/C/populate.sh
libc/C/populate.sh
Run Code Online (Sandbox Code Playgroud)
我也知道如何去除路径中的后期术语。即下降一级:
cd x86-headers
for x in */C/populate.sh; do i=${x%%/*}; echo $i; done
Run Code Online (Sandbox Code Playgroud)
给
elf
gl
gmp
gnome2
gtk2
jni
libc
Run Code Online (Sandbox Code Playgroud)
但是,试图将这些结合起来是行不通的。IE
for x in x86-headers/*/C/populate.sh; do i=${${x##x86-headers}%%/*}; echo $i; done
Run Code Online (Sandbox Code Playgroud)
给
bash: ${${x##x86-headers}%%/*}: bad substitution
Run Code Online (Sandbox Code Playgroud)
毫无疑问,这是不正确的语法,但我不知道正确的语法。当然,可能有更好的方法来做到这一点。如果我使用 Python,我会使用 split …
随着日志文件变得越来越大,我试图制作一些备份脚本。我所拥有的是处理当前文件(例如secure文件 in /var/log/)并从该文件中删除内容。但是有一些文件的名称是:secure.1,secure.2所有这些我都喜欢计算它们,如果数字更大,则将2它们全部存档。我找不到找到这些文件或计算它们的方法。我想到的第一个想法是:
find /var/log/ -name *.1 | wc -l
Run Code Online (Sandbox Code Playgroud)
这将始终打印1,因为只有一个文件secure.1。我如何在 for 循环中进行计数,我可以在其中指定类似{1..5}或类似的数字范围。有没有办法将这些文件分开并将它们作为一个文件进行备份或删除或其他任何...或者首先我如何找到所有以 number 结尾的数字。
考虑:
echo -e "a\nb\nc\nd\ne\nf\ng\nh" | sed '3,5a test'
Run Code Online (Sandbox Code Playgroud)
这将匹配第 3、4 和 5 行。
但我试图只匹配第 3 行和第 5 行(而不是第 4 行)。并在它们之后附加“测试”。
如果我有一个字符串“1 2 3 2 1” - 或一个数组 [1,2,3,2,1] - 我如何选择唯一值,即
"1 2 3 2 1" produces "1 2 3"
Run Code Online (Sandbox Code Playgroud)
或者
[1,2,3,2,1] produces [1,2,3]
Run Code Online (Sandbox Code Playgroud)
类似于 uniq 但 uniq 似乎适用于整行,而不是一行内的模式......