от верхнего до нижнего регистра с использованием sed

'-----------------------------------------------------------------------

'Creater : Rachitha Madusanka

'http://www.megazoon.com

'jewandara@gmail.com

'jewandara@hotmail.com

'Web Designer and Software Developer

'@ http://www.zionx.net16.net

'-----------------------------------------------------------------------




Function ValidEmail(ByVal strCheck As String) As Boolean
    Try
        Dim bCK As Boolean
        Dim strDomainType As String


        Const sInvalidChars As String = "!#$%^&*()=+{}[]|\;:'/?>,< "
        Dim i As Integer

        'Check to see if there is a double quote
        bCK = Not InStr(1, strCheck, Chr(34)) > 0
        If Not bCK Then GoTo ExitFunction

        'Check to see if there are consecutive dots
        bCK = Not InStr(1, strCheck, "..") > 0
        If Not bCK Then GoTo ExitFunction

        ' Check for invalid characters.
        If Len(strCheck) > Len(sInvalidChars) Then
            For i = 1 To Len(sInvalidChars)
                If InStr(strCheck, Mid(sInvalidChars, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        Else
            For i = 1 To Len(strCheck)
                If InStr(sInvalidChars, Mid(strCheck, i, 1)) > 0 Then
                    bCK = False
                    GoTo ExitFunction
                End If
            Next
        End If

        If InStr(1, strCheck, "@") > 1 Then 'Check for an @ symbol
            bCK = Len(Left(strCheck, InStr(1, strCheck, "@") - 1)) > 0
        Else
            bCK = False
        End If
        If Not bCK Then GoTo ExitFunction

        strCheck = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "@"))
        bCK = Not InStr(1, strCheck, "@") > 0 'Check to see if there are too many @'s
        If Not bCK Then GoTo ExitFunction

        strDomainType = Right(strCheck, Len(strCheck) - InStr(1, strCheck, "."))
        bCK = Len(strDomainType) > 0 And InStr(1, strCheck, ".") < Len(strCheck)
        If Not bCK Then GoTo ExitFunction

        strCheck = Left(strCheck, Len(strCheck) - Len(strDomainType) - 1)
        Do Until InStr(1, strCheck, ".") <= 1
            If Len(strCheck) >= InStr(1, strCheck, ".") Then
                strCheck = Left(strCheck, Len(strCheck) - (InStr(1, strCheck, ".") - 1))
            Else
                bCK = False
                GoTo ExitFunction
            End If
        Loop
        If strCheck = "." Or Len(strCheck) = 0 Then bCK = False

ExitFunction:
        ValidEmail = bCK
    Catch ex As ArgumentException
        Return False
    End Try
    Return ValidEmail
End Function
21
задан Chad Birch 3 April 2009 в 22:09
поделиться

6 ответов

s/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g

Тест:

$ echo 'getFoo_Bar' | sed -e 's/\(get[A-Z][A-Za-z0-9]*_\)\([A-Z]\)/\1\L\2/g'
getFoo_bar
25
ответ дан strager 3 April 2009 в 22:09
поделиться

Несколько короче:

echo getFoo_Bar | sed 's/_\(.\)/_\L\1/'
7
ответ дан kalyanji 3 April 2009 в 22:09
поделиться

Если вы хотите написать все в нижнем регистре сразу после подчеркивания, то это будет работать для вас:

echo getFoo_Bar | gawk -F_ '{print tolower($2)}'
0
ответ дан diosney 3 April 2009 в 22:09
поделиться
echo getFoo_Bar | sed 's/[Bb]/\L&/g'
-2
ответ дан Widor 3 April 2009 в 22:09
поделиться

Вы можете использовать Perl для этого:

perl -pe 's/(get[A-Z][A-Za-z0-9]*)_([A-Z])/\1_\l\2/'

Здесь есть трюк \ l.

sed не выполняет прописные / строчные буквы в сопоставляемых группах.

1
ответ дан brian-brazil 3 April 2009 в 22:09
поделиться

Чтобы изменить getFoo_Bar на getFoo_bar, используя sed:

echo "getFoo_Bar" | sed 's/^\(.\{7\}\)\(.\)\(.*\)$/\1\l\2\3/'

Заглавные и строчные буквы обрабатываются с помощью:

  • \U Делает весь текст правым верхним регистром.
  • \u делает только первый символ в правом верхнем регистре.
  • \L Делает весь текст правым нижним регистром.
  • \l Делает только первый символ в правом нижнем регистре. (Обратите внимание, что это строчная буква L)

Пример - это всего лишь один метод для сопоставления с образцом, основанный только на изменении одного фрагмента текста. Используя пример, getFoo_BAr преобразуется в getFoo_bAr, обратите внимание, что буква A не была изменена.

33
ответ дан Nathan Fellman 3 April 2009 в 22:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: