linux:如何在每行的开头添加一个前缀字符串及扩展

本文介绍了在Linux环境下如何利用sed命令实现文本处理的各种应用场景,包括在文件每行的开头添加前缀字符串、进行基本的替换操作以及过滤输出等。通过具体的命令示例,读者可以快速掌握sed命令的强大功能。

linux:如何在每行的开头添加一个前缀字符串

# If you want to edit the file in-place
sed -i -e 's/^/prefix/' file

# If you want to create a new file
sed -e 's/^/prefix/' file > file.new

基本的替换

:s/vivian/sky/ #替换当前行第一个 vivian 为 sky

:s/vivian/sky/g #替换当前行所有 vivian 为 sky

:n,$s/vivian/sky/ #替换第 n 行开始到最后一行中每一行的第一个 vivian 为 sky

:n,$s/vivian/sky/g #替换第 n 行开始到最后一行中每一行所有 vivian 为 sky

# (n 为数字,若 n 为 .,表示从当前行开始到最后一行)

:%s/vivian/sky/ #(等同于 :g/vivian/s//sky/) 替换每一行的第一个 vivian 为 sky

:%s/vivian/sky/g #(等同于 :g/vivian/s//sky/g) 替换每一行中所有 vivian 为 sky

# 过滤输出
cat 20200927-9-10_1983712 | egrep '\|2020-09-27 .{8}\|9\|10\|' > 9-10.txt

# 取第N个字段,去重排序
cat sdk.log | grep sdk_login | wk -F '|' '{print $20}' | sort | uniq | wc -l

<think>好的,用户的问题是关于如何验证QString是否可以作为合法的文件目录路径。我需要先理解Qt中的相关功能。Qt的QString用于处理字符串,而文件路径的合法性涉及到操作系统的规则,不同系统有不同的限制。 首先,我应该考虑Qt是否提供了直接的方法来检查路径的合法性。想到QDir类,可能有一些方法,比如QDir::isAbsolutePath,但这是判断是否为绝对路径,而不是合法性。另外,QFileInfo可以检测文件是否存在,但用户需要的是验证字符串本身是否合法,无论文件是否存在。 接下来,可能需要手动检查字符串中的非法字符。例如,Windows不允许字符如\ / : * ? " < > |,而Linux/Unix不允许/和空字符。Qt提供了QRegularExpression来支持正则表达式,可以用来匹配这些非法字符。 还需要注意路径的长度限制,比如Windows的MAX_PATH通常是260个字符。此外,保留名称如CON、PRN等也需要排除。 所以,解决方案可能包括: 1. 使用正则表达式匹配非法字符。 2. 检查保留名称。 3. 处理长度限制。 4. 使用Qt的API辅助验证,如转换为本地路径格式。 需要确保代码示例正确,处理不同操作系统的情况,可能通过预处理器指令区分平台。用户可能需要跨平台的支持,因此代码需要考虑Windows和Linux/macOS的不同规则。 然后,生成相关问题时要围绕路径验证的扩展内容,比如特定系统的规则、处理相对路径、Qt的其他相关类等。</think>在Qt中验证QString是否合法文件目录路径,需结合操作系统规范与Qt API实现,具体步骤如下: ### 一、基础验证原则 1. **禁止字符检测** - Windows系统:过滤字符集`\\/:*?"<>|`,使用正则表达式: ```cpp QRegularExpression winRegex("[\\\\/:*?\"<>|]"); ``` - Linux/macOS:仅需过滤空字符和`/`(根目录除外): ```cpp QRegularExpression unixRegex("[\0/]"); ``` 2. **保留名称检测** - Windows需排除`CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9]`等保留设备名[^1],示例代码: ```cpp QRegularExpression reservedNames("^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$", QRegularExpression::CaseInsensitiveOption); ``` ### 二、Qt专用方法实现 ```cpp bool isValidPath(const QString &path) { // 空路径直接返回失败 if (path.isEmpty()) return false; // 操作系统特定检测 #if defined(Q_OS_WIN) // Windows路径长度限制(含扩展长度前缀) if (path.length() > 32767) return false; // 非法字符检测 QRegularExpression illegalChars("[\\\\/:*?\"<>|]"); // 保留名称检测 QRegularExpression reservedNames("^(CON|PRN|AUX|NUL|COM[1-9]|LPT[1-9])$", QRegularExpression::CaseInsensitiveOption); #else // UNIX系路径长度限制 if (path.length() > 4096) return false; QRegularExpression illegalChars("[\0/]"); // 仅需过滤空字符和/ QRegularExpression reservedNames; // UNIX无保留名称限制 #endif // 路径组件拆分检测 QStringList parts = path.split(QDir::separator(), Qt::SkipEmptyParts); foreach (const QString &part, parts) { if (part.contains(illegalChars)) return false; if (reservedNames.match(part).hasMatch()) return false; } // 转换为本地格式二次验证 QFileInfo fi(path); return fi.isAbsolute() ? QDir().isAbsolutePath(path) : true; } ``` ### 三、特殊场景处理 1. **相对路径验证**:使用`QDir::isRelativePath()`判断相对路径有效性 2. **网络路径支持**:Windows需允许`\\`开头的UNC路径 3. **长路径支持**:Windows需添加`\\?\`前缀突破260字符限制[^2] 相关问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

mylife512

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值