我有一个包含各种信息的文件。字段由 | 分隔。其中一个字段包含一个目录。例如 :
blah|blah|blah|/usr/local/etc/|blah|blah
我需要验证路径字段不以“/”结尾。我正在使用 ksh。有什么建议么?
谢谢。
假设目录始终在第 4 个字段中
line=0
while IFS='|' read -rA fields; do
let line++
[[ ${fields[3]} == */ ]] && echo line $line: ends with a slash
done < filename
尝试这个:
if [ line ~= '(/\w+)+(\||$)' ]
我的 shell 语法生锈了,所以这可能需要稍微按摩一下
不是 ksh,但这是一项很自然的工作awk
:
awk -F\| '$4 ~ /\/$/ {
print "Trailing slash in line "NR":", $4
}' ${file:?}
不要忘记像 / (root) 这样的特殊路径 我将 / (root) 保留在下面的代码中
echo "blah|blah|blah|/usr/local/etc/|blah|blah|
blah|blah|blah|/|blah|blah
blah|blah|blah|.|blah|blah
blah|blah|blah|/usr/local/etc|blah|blah" \
sed "
/\/\|/ {
/\|\/\|/ !s/\/|/|/
}"
解释://\|/ 处理“/|”所在的行 出现 //\|/ !处理“|/|”所在的行 不出现(这里在前面测试的情况下出现)s//|/|/替换“/|” 通过“|” (当两个测试都成功发生时)