文章目录
1.关于Linux中查找文件的常用命令:
在Linux系统中,查找文件可以通过多种命令完成,这里介绍几个最常用的命令:
-
find
:find
命令用于在目录树中查找文件,并对找到的文件执行指定的操作。- 示例:查找当前目录及子目录下所有
.txt
文件:find . -name "*.txt"
-
locate
:locate
命令用于查找符合条件的文件,这个命令需要依赖于事先建立的文件数据库。相比find
,locate
通常查找得更快,但依赖于数据库的定期更新。- 示例:查找包含
example
的所有文件:locate example
-
grep
:grep
命令用于搜索文件内容,而不是文件名,但它常被用来结合其他命令寻找特定的文件。- 示例:查找当前目录及子目录下所有文件中包含 “hello” 文字的文件:
grep -r "hello" .
2.关于Python正则表达式中的转义字符和处理方法:
在Python的正则表达式中,一些字符具有特殊的含义,比如 .
、*
、?
、+
、^
、$
等。如果要匹配这些字符本身,则需要使用转义字符 \
。
-
常见的转义字符:
\d
:匹配任何十进制数;相当于类[0-9]
。\D
:匹配任何非数字字符;相当于类[^0-9]
。\s
:匹配任何空白字符;相当于类[ \t\n\r\f\v]
。\S
:匹配任何非空白字符;相当于类[^ \t\n\r\f\v]
。\w
:匹配任何字母数字字符;相当于类[a-zA-Z0-9_]
。\W
:匹配任何非字母数字字符;相当于类[^a-zA-Z0-9_]
。
-
处理转义字符:
- 在字符串前加
r
,表示原始字符串,用于防止Python解释器解释\
。 - 示例:
import re regex = r"\d+\.txt" re.findall(regex, "123.txt 456.txt")
- 在字符串前加
正则表达式中的特殊字符用于指定搜索模式的结构。这些字符有特定的含义,比如匹配任意字符、限定重复次数、创建字符集等。在使用正则表达式时,理解这些特殊字符是非常重要的。以下是一些常见的正则表达式特殊字符及其用法:
常见的特殊字符:
-
.
- 匹配除换行符外的任何单个字符。- 例如,
a.b
可以匹配 “acb”、“aab”、“apb” 等。
- 例如,
-
^
- 匹配输入字符串的开始位置。- 例如,
^Hello
匹配以 “Hello” 开头的任何字符串。
- 例如,
-
$
- 匹配输入字符串的结束位置。- 例如,
end$
匹配以 “end” 结尾的任何字符串。
- 例如,
-
*
- 匹配前面的子表达式零次或多次。- 例如,
bo*
可以匹配 “b”、“bo”、“boo”、“booo” 等。
- 例如,
-
+
- 匹配前面的子表达式一次或多次。- 例如,
a+
至少匹配一个 “a”(“a”、“aa”、“aaa” 等)。
- 例如,
-
?
- 匹配前面的子表达式零次或一次。- 例如,
do(es)?
可以匹配 “do” 或 “does”。
- 例如,
-
{n}
- n 是一个非负整数,正好匹配 n 次。- 例如,
a{3}
将匹配 “aaa”。
- 例如,
-
{n,}
- n 是一个非负整数,至少匹配 n 次。- 例如,
a{2,}
将匹配 “aa”、“aaa”、“aaaa” 等。
- 例如,
-
{n,m}
- m 和 n 是非负整数,其中 n <= m。最少匹配 n 次且最多匹配 m 次。- 例如,
a{1,3}
将匹配 “a”、“aa” 或 “aaa”。
- 例如,
-
[ ]
- 表示一个字符集合。匹配所包含的任一字符。- 例如,
[abc]
将匹配 “a”、“b” 或 “c”。
- 例如,
-
[^ ]
- 匹配未列出的任何字符。- 例如,
[^abc]
将匹配除 “a”、“b”、“c” 之外的任何字符。
- 例如,
-
|
- 选择。匹配符号前或后的字符。- 例如,
abc|def
可以匹配 “abc” 或 “def”。
- 例如,
-
\
- 转义特殊字符。- 例如,
\.
表示字面的 “.”。
- 例如,
处理正则表达式中的转义字符:
当你需要在模式中包括一个特殊字符时,就需要使用反斜杠 \
对其进行转义。这是因为如果直接使用这些特殊字符,正则表达式引擎会将它们解释为控制命令而不是普通字符。
- 例如,如果你想匹配一个实际的星号(*),你应该在正则表达式中使用
\*
。
这些特殊字符和转义技巧是正则表达式的基础,掌握它们对于构建有效的搜索模式非常重要。
3.关于Python的 sort()
函数原理:
-
对纯数字排序:
- Python的
sort()
函数可以直接在列表等数据结构上调用,对纯数字的列表进行排序时,它按照数字的大小进行排序。 - 原因:数字自身具有可比性,Python 内部实现了对数字类型的比较操作。
- Python的
-
对类实例排序:
- 当列表包含自定义的类实例时,Python不知道如何直接比较这些对象,因此需要提供一个比较的标准。
- 通过
sort()
函数的key
参数来指定排序的依据:class User: def __init__(self, user_id): self.user_id = user_id user_list = [User(99), User(17), User(2)] user_list.sort(key=lambda x: x.user_id)
- 通过定义类的
__lt__
方法来让类自身支持排序:class User: def __init__(self, user_id): self.user_id = user_id def __lt__(self, other): return self.user_id < other.user_id user_list.sort()
4.Shell脚本如何判断某文件是否存在
在 Shell 脚本中,判断文件是否存在是一个非常常见的操作。你可以使用 if
语句结合 [
测试命令(或使用 [[
来进行更现代的测试)来判断文件是否存在。这里有几种基本的方法:
1. 使用 [ -f ]
测试文件存在
-f
选项用于检查指定的文件是否存在且为普通文件(不是目录或设备文件)。
if [ -f "/path/to/your/file" ]; then
echo "文件存在。"
else
echo "文件不存在。"
fi
2. 使用 [ -e ]
测试文件或目录存在
-e
选项用来检查指定的文件或目录是否存在。
if [ -e "/path/to/your/file" ]; then
echo "文件或目录存在。"
else
echo "文件或目录不存在。"
fi
3. 使用更现代的 [[ ]]
测试
[[ ]]
是一个更现代的 Bash 测试构造,它比传统的 [ ]
提供了一些额外的便利,如更自然的语法和不需要担心某些字符引起的问题(如空格)。
if [[ -f "/path/to/your/file" ]]; then
echo "文件存在。"
else
echo "文件不存在。"
fi
4. 处理多个文件存在性检查
如果你需要检查多个文件是否存在,可以将它们组合在一起:
if [[ -f "/path/to/file1" && -f "/path/to/file2" ]]; then
echo "两个文件都存在。"
else
echo "至少有一个文件不存在。"
fi
5. 可以通过变量使用文件路径
也可以将文件路径存储在变量中,然后使用这些变量进行检查:
file_path="/path/to/your/file"
if [ -f "$file_path" ]; then
echo "文件存在。"
else
echo "文件不存在。"
fi
这些是在 Shell 脚本中检查文件存在性的基本方法,它们在日常脚本编写中非常实用,可以帮助你在执行文件操作之前确保文件的存在。