0

我有一个包含各种信息的文件。字段由 | 分隔。其中一个字段包含一个目录。例如 :

blah|blah|blah|/usr/local/etc/|blah|blah

我需要验证路径字段不以“/”结尾。我正在使用 ksh。有什么建议么?

谢谢。

4

4 回答 4

2

假设目录始终在第 4 个字段中

line=0
while IFS='|' read -rA fields; do
    let line++
    [[ ${fields[3]} == */ ]] && echo line $line: ends with a slash
done < filename
于 2013-10-16T19:07:37.283 回答
0

尝试这个:

if [ line ~= '(/\w+)+(\||$)' ]

我的 shell 语法生锈了,所以这可能需要稍微按摩一下

于 2013-10-19T23:55:45.297 回答
0

不是 ksh,但这是一项很自然的工作awk

awk -F\| '$4 ~ /\/$/ {
    print "Trailing slash in line "NR":", $4
}' ${file:?}
于 2013-10-19T19:57:34.070 回答
0

不要忘记像 / (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//|/|/替换“/|” 通过“|” (当两个测试都成功发生时)

于 2013-10-28T16:24:48.573 回答