Can not use `cut -c` (`--characters`) with UTF-8?2019 Community Moderator ElectionA command to print only last 3 characters of a stringHow to do a regex search in a UTF-16LE file while in a UTF-8 locale?Some UTF-8 characters not being recognized by grep or sedProcess a file that starts with a BOM (FF FE)support for utf-8 encoding with lprConverting documents to text with UTF-8 encodingFile weird character encodingLMDE2 / MATE locale charset inconsistencyfold and text columnsprintf: multibyte charactersRemoving characters with sed
Should I outline or discovery write my stories?
Why electric field inside a cavity of a non-conducting sphere not zero?
Why is it that I can sometimes guess the next note?
Which one is correct as adjective “protruding” or “protruded”?
Is it possible to put a rectangle as background in the author section?
250 Floor Tower
What should you do if you miss a job interview (deliberately)?
How to explain what's wrong with this application of the chain rule?
What is this cable/device?
Creepy dinosaur pc game identification
How do you make your own symbol when Detexify fails?
Strong empirical falsification of quantum mechanics based on vacuum energy density
Why did the EU agree to delay the Brexit deadline?
Loading commands from file
Does a 'pending' US visa application constitute a denial?
copy and scale one figure (wheel)
Redundant comparison & "if" before assignment
What does routing an IP address mean?
How do I find all files that end with a dot
What is Cash Advance APR?
Offered money to buy a house, seller is asking for more to cover gap between their listing and mortgage owed
Is it possible to have a strip of cold climate in the middle of a planet?
How to implement a feedback to keep the DC gain at zero for this conceptual passive filter?
What if a revenant (monster) gains fire resistance?
Can not use `cut -c` (`--characters`) with UTF-8?
2019 Community Moderator ElectionA command to print only last 3 characters of a stringHow to do a regex search in a UTF-16LE file while in a UTF-8 locale?Some UTF-8 characters not being recognized by grep or sedProcess a file that starts with a BOM (FF FE)support for utf-8 encoding with lprConverting documents to text with UTF-8 encodingFile weird character encodingLMDE2 / MATE locale charset inconsistencyfold and text columnsprintf: multibyte charactersRemoving characters with sed
The command cut
has an option -c
to work on characters, instead of bytes with the option -b
. But that does not seem to work, in en_US.UTF-8
locale:
The second byte gives the second ASCII character (which is encoded just the same in UTF-8):
$ printf 'ABC' | cut -b 2
B
but does not give the second of three greek non-ASCII characters in UTF-8 locale:
$ printf 'αβγ' | cut -b 2
�
That's alright - it's the second byte.
So we look at the second character instead:
$ printf 'αβγ' | cut -c 2
�
That looks broken.
With some experiments, it turns out that the range 3-4
shows the second character:
$ printf 'αβγ' | cut -c 3-4
β
But that's just the same as the bytes 3 to 4:
$ printf 'αβγ' | cut -b 3-4
β
So the -c
does not more than the -b
for UTF-8.
I'd expect the locale setup is not right for UTF-8, but in comparison, wc
works as expected;
It is often used to count bytes, with option -c
(--bytes
).
(Note the confusing option names.)
$ printf 'αβγ' | wc -c
6
But it can also count characters with option -m
(--chars
), which just works:
$ printf 'αβγ' | wc -m
3
So my configuration seems to be ok - but something is special about cut
.
Maybe it does not support UTF-8 at all? But it does seem to support multi-byte characters, otherwise it would not need to support -b
and -c
.
So, what's wrong? And why?
The locale setup looks right for utf8, as far as I can tell:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
The input, byte by byte:
$ printf 'αβγ' | hd
00000000 ce b1 ce b2 ce b3 |......|
00000006
text-processing character-encoding unicode cut
add a comment |
The command cut
has an option -c
to work on characters, instead of bytes with the option -b
. But that does not seem to work, in en_US.UTF-8
locale:
The second byte gives the second ASCII character (which is encoded just the same in UTF-8):
$ printf 'ABC' | cut -b 2
B
but does not give the second of three greek non-ASCII characters in UTF-8 locale:
$ printf 'αβγ' | cut -b 2
�
That's alright - it's the second byte.
So we look at the second character instead:
$ printf 'αβγ' | cut -c 2
�
That looks broken.
With some experiments, it turns out that the range 3-4
shows the second character:
$ printf 'αβγ' | cut -c 3-4
β
But that's just the same as the bytes 3 to 4:
$ printf 'αβγ' | cut -b 3-4
β
So the -c
does not more than the -b
for UTF-8.
I'd expect the locale setup is not right for UTF-8, but in comparison, wc
works as expected;
It is often used to count bytes, with option -c
(--bytes
).
(Note the confusing option names.)
$ printf 'αβγ' | wc -c
6
But it can also count characters with option -m
(--chars
), which just works:
$ printf 'αβγ' | wc -m
3
So my configuration seems to be ok - but something is special about cut
.
Maybe it does not support UTF-8 at all? But it does seem to support multi-byte characters, otherwise it would not need to support -b
and -c
.
So, what's wrong? And why?
The locale setup looks right for utf8, as far as I can tell:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
The input, byte by byte:
$ printf 'αβγ' | hd
00000000 ce b1 ce b2 ce b3 |......|
00000006
text-processing character-encoding unicode cut
Interesting! It looks like-c
is using the same code as-b
. Did you have a look at the source code? Maybe you can find a hint what-c
is actually meant for.
– michas
Oct 23 '14 at 6:11
add a comment |
The command cut
has an option -c
to work on characters, instead of bytes with the option -b
. But that does not seem to work, in en_US.UTF-8
locale:
The second byte gives the second ASCII character (which is encoded just the same in UTF-8):
$ printf 'ABC' | cut -b 2
B
but does not give the second of three greek non-ASCII characters in UTF-8 locale:
$ printf 'αβγ' | cut -b 2
�
That's alright - it's the second byte.
So we look at the second character instead:
$ printf 'αβγ' | cut -c 2
�
That looks broken.
With some experiments, it turns out that the range 3-4
shows the second character:
$ printf 'αβγ' | cut -c 3-4
β
But that's just the same as the bytes 3 to 4:
$ printf 'αβγ' | cut -b 3-4
β
So the -c
does not more than the -b
for UTF-8.
I'd expect the locale setup is not right for UTF-8, but in comparison, wc
works as expected;
It is often used to count bytes, with option -c
(--bytes
).
(Note the confusing option names.)
$ printf 'αβγ' | wc -c
6
But it can also count characters with option -m
(--chars
), which just works:
$ printf 'αβγ' | wc -m
3
So my configuration seems to be ok - but something is special about cut
.
Maybe it does not support UTF-8 at all? But it does seem to support multi-byte characters, otherwise it would not need to support -b
and -c
.
So, what's wrong? And why?
The locale setup looks right for utf8, as far as I can tell:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
The input, byte by byte:
$ printf 'αβγ' | hd
00000000 ce b1 ce b2 ce b3 |......|
00000006
text-processing character-encoding unicode cut
The command cut
has an option -c
to work on characters, instead of bytes with the option -b
. But that does not seem to work, in en_US.UTF-8
locale:
The second byte gives the second ASCII character (which is encoded just the same in UTF-8):
$ printf 'ABC' | cut -b 2
B
but does not give the second of three greek non-ASCII characters in UTF-8 locale:
$ printf 'αβγ' | cut -b 2
�
That's alright - it's the second byte.
So we look at the second character instead:
$ printf 'αβγ' | cut -c 2
�
That looks broken.
With some experiments, it turns out that the range 3-4
shows the second character:
$ printf 'αβγ' | cut -c 3-4
β
But that's just the same as the bytes 3 to 4:
$ printf 'αβγ' | cut -b 3-4
β
So the -c
does not more than the -b
for UTF-8.
I'd expect the locale setup is not right for UTF-8, but in comparison, wc
works as expected;
It is often used to count bytes, with option -c
(--bytes
).
(Note the confusing option names.)
$ printf 'αβγ' | wc -c
6
But it can also count characters with option -m
(--chars
), which just works:
$ printf 'αβγ' | wc -m
3
So my configuration seems to be ok - but something is special about cut
.
Maybe it does not support UTF-8 at all? But it does seem to support multi-byte characters, otherwise it would not need to support -b
and -c
.
So, what's wrong? And why?
The locale setup looks right for utf8, as far as I can tell:
$ locale
LANG=en_US.UTF-8
LANGUAGE=en_US
LC_CTYPE=en_US.UTF-8
LC_NUMERIC="en_US.UTF-8"
LC_TIME="en_US.UTF-8"
LC_COLLATE="en_US.UTF-8"
LC_MONETARY="en_US.UTF-8"
LC_MESSAGES="en_US.UTF-8"
LC_PAPER="en_US.UTF-8"
LC_NAME="en_US.UTF-8"
LC_ADDRESS="en_US.UTF-8"
LC_TELEPHONE="en_US.UTF-8"
LC_MEASUREMENT="en_US.UTF-8"
LC_IDENTIFICATION="en_US.UTF-8"
LC_ALL=
The input, byte by byte:
$ printf 'αβγ' | hd
00000000 ce b1 ce b2 ce b3 |......|
00000006
text-processing character-encoding unicode cut
text-processing character-encoding unicode cut
asked Oct 23 '14 at 5:56
Volker SiegelVolker Siegel
11.1k33261
11.1k33261
Interesting! It looks like-c
is using the same code as-b
. Did you have a look at the source code? Maybe you can find a hint what-c
is actually meant for.
– michas
Oct 23 '14 at 6:11
add a comment |
Interesting! It looks like-c
is using the same code as-b
. Did you have a look at the source code? Maybe you can find a hint what-c
is actually meant for.
– michas
Oct 23 '14 at 6:11
Interesting! It looks like
-c
is using the same code as -b
. Did you have a look at the source code? Maybe you can find a hint what -c
is actually meant for.– michas
Oct 23 '14 at 6:11
Interesting! It looks like
-c
is using the same code as -b
. Did you have a look at the source code? Maybe you can find a hint what -c
is actually meant for.– michas
Oct 23 '14 at 6:11
add a comment |
3 Answers
3
active
oldest
votes
You haven't said which cut
you're using, but since you've mentioned the GNU long option --characters
I'll assume it's that one. In that case, note this passage from info coreutils 'cut invocation'
:
‘-c character-list’
‘--characters=character-list’
Select for printing only the characters in positions listed in character-list. The same as
-b
for now, but internationalization will change that.
(emphasis added)
For the moment, GNU cut
always works in terms of single-byte "characters", so the behaviour you see is expected.
Supporting both the -b
and -c
options is required by POSIX — they weren't added to GNU cut
because it had multi-byte support and they worked properly, but to avoid giving errors on POSIX-compliant input. The same -c
has been done in some other cut
implementations, although not FreeBSD's and OS X's at least.
This is the historic behaviour of -c
. -b
was newly added to take over the byte role so that -c
can work with multi-byte characters. Maybe in a few years it will work as desired consistently, although progress hasn't exactly been quick (it's been over a decade already). GNU cut
doesn't even implement the -n
option yet, even though it is orthogonal and intended to help the transition. There are potential compatibility problems with old scripts, which may be a concern, although I don't know definitively what the reason is.
1
good work. youll find the same kind of comments in GNU'str
docs as well. and eventar
unless i misremember. i guess its a big project.
– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm incut
? For example, where is it possible to download the sources for patchedcut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g.5-8,44-49
)
– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives tocut -c
here: superuser.com/questions/506164/…
– myrdd
Dec 12 '18 at 14:32
add a comment |
Since many grep
implementations are multibyte-aware, you can also use grep -o
to simulate some uses of cut -c
.
$ echo Τηεοδ29 | grep -o '^..'
Τη
$ echo Τηεοδ29 | egrep -o '^..' | grep -o '.$'
η
Adjust the number of periods to simulate cut
ranges.
add a comment |
colrm
(part of util-linux
, should be already installed on most distributions) seems to handle internationalization much better :
$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α
Beware of the numbering : colrm N
will remove columns from N
, printing characters up to N-1
.
(credits)
add a comment |
Your Answer
StackExchange.ready(function()
var channelOptions =
tags: "".split(" "),
id: "106"
;
initTagRenderer("".split(" "), "".split(" "), channelOptions);
StackExchange.using("externalEditor", function()
// Have to fire editor after snippets, if snippets enabled
if (StackExchange.settings.snippets.snippetsEnabled)
StackExchange.using("snippets", function()
createEditor();
);
else
createEditor();
);
function createEditor()
StackExchange.prepareEditor(
heartbeatType: 'answer',
autoActivateHeartbeat: false,
convertImagesToLinks: false,
noModals: true,
showLowRepImageUploadWarning: true,
reputationToPostImages: null,
bindNavPrevention: true,
postfix: "",
imageUploader:
brandingHtml: "Powered by u003ca class="icon-imgur-white" href="https://imgur.com/"u003eu003c/au003e",
contentPolicyHtml: "User contributions licensed under u003ca href="https://creativecommons.org/licenses/by-sa/3.0/"u003ecc by-sa 3.0 with attribution requiredu003c/au003e u003ca href="https://stackoverflow.com/legal/content-policy"u003e(content policy)u003c/au003e",
allowUrls: true
,
onDemand: true,
discardSelector: ".discard-answer"
,immediatelyShowMarkdownHelp:true
);
);
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f163721%2fcan-not-use-cut-c-characters-with-utf-8%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
3 Answers
3
active
oldest
votes
3 Answers
3
active
oldest
votes
active
oldest
votes
active
oldest
votes
You haven't said which cut
you're using, but since you've mentioned the GNU long option --characters
I'll assume it's that one. In that case, note this passage from info coreutils 'cut invocation'
:
‘-c character-list’
‘--characters=character-list’
Select for printing only the characters in positions listed in character-list. The same as
-b
for now, but internationalization will change that.
(emphasis added)
For the moment, GNU cut
always works in terms of single-byte "characters", so the behaviour you see is expected.
Supporting both the -b
and -c
options is required by POSIX — they weren't added to GNU cut
because it had multi-byte support and they worked properly, but to avoid giving errors on POSIX-compliant input. The same -c
has been done in some other cut
implementations, although not FreeBSD's and OS X's at least.
This is the historic behaviour of -c
. -b
was newly added to take over the byte role so that -c
can work with multi-byte characters. Maybe in a few years it will work as desired consistently, although progress hasn't exactly been quick (it's been over a decade already). GNU cut
doesn't even implement the -n
option yet, even though it is orthogonal and intended to help the transition. There are potential compatibility problems with old scripts, which may be a concern, although I don't know definitively what the reason is.
1
good work. youll find the same kind of comments in GNU'str
docs as well. and eventar
unless i misremember. i guess its a big project.
– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm incut
? For example, where is it possible to download the sources for patchedcut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g.5-8,44-49
)
– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives tocut -c
here: superuser.com/questions/506164/…
– myrdd
Dec 12 '18 at 14:32
add a comment |
You haven't said which cut
you're using, but since you've mentioned the GNU long option --characters
I'll assume it's that one. In that case, note this passage from info coreutils 'cut invocation'
:
‘-c character-list’
‘--characters=character-list’
Select for printing only the characters in positions listed in character-list. The same as
-b
for now, but internationalization will change that.
(emphasis added)
For the moment, GNU cut
always works in terms of single-byte "characters", so the behaviour you see is expected.
Supporting both the -b
and -c
options is required by POSIX — they weren't added to GNU cut
because it had multi-byte support and they worked properly, but to avoid giving errors on POSIX-compliant input. The same -c
has been done in some other cut
implementations, although not FreeBSD's and OS X's at least.
This is the historic behaviour of -c
. -b
was newly added to take over the byte role so that -c
can work with multi-byte characters. Maybe in a few years it will work as desired consistently, although progress hasn't exactly been quick (it's been over a decade already). GNU cut
doesn't even implement the -n
option yet, even though it is orthogonal and intended to help the transition. There are potential compatibility problems with old scripts, which may be a concern, although I don't know definitively what the reason is.
1
good work. youll find the same kind of comments in GNU'str
docs as well. and eventar
unless i misremember. i guess its a big project.
– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm incut
? For example, where is it possible to download the sources for patchedcut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g.5-8,44-49
)
– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives tocut -c
here: superuser.com/questions/506164/…
– myrdd
Dec 12 '18 at 14:32
add a comment |
You haven't said which cut
you're using, but since you've mentioned the GNU long option --characters
I'll assume it's that one. In that case, note this passage from info coreutils 'cut invocation'
:
‘-c character-list’
‘--characters=character-list’
Select for printing only the characters in positions listed in character-list. The same as
-b
for now, but internationalization will change that.
(emphasis added)
For the moment, GNU cut
always works in terms of single-byte "characters", so the behaviour you see is expected.
Supporting both the -b
and -c
options is required by POSIX — they weren't added to GNU cut
because it had multi-byte support and they worked properly, but to avoid giving errors on POSIX-compliant input. The same -c
has been done in some other cut
implementations, although not FreeBSD's and OS X's at least.
This is the historic behaviour of -c
. -b
was newly added to take over the byte role so that -c
can work with multi-byte characters. Maybe in a few years it will work as desired consistently, although progress hasn't exactly been quick (it's been over a decade already). GNU cut
doesn't even implement the -n
option yet, even though it is orthogonal and intended to help the transition. There are potential compatibility problems with old scripts, which may be a concern, although I don't know definitively what the reason is.
You haven't said which cut
you're using, but since you've mentioned the GNU long option --characters
I'll assume it's that one. In that case, note this passage from info coreutils 'cut invocation'
:
‘-c character-list’
‘--characters=character-list’
Select for printing only the characters in positions listed in character-list. The same as
-b
for now, but internationalization will change that.
(emphasis added)
For the moment, GNU cut
always works in terms of single-byte "characters", so the behaviour you see is expected.
Supporting both the -b
and -c
options is required by POSIX — they weren't added to GNU cut
because it had multi-byte support and they worked properly, but to avoid giving errors on POSIX-compliant input. The same -c
has been done in some other cut
implementations, although not FreeBSD's and OS X's at least.
This is the historic behaviour of -c
. -b
was newly added to take over the byte role so that -c
can work with multi-byte characters. Maybe in a few years it will work as desired consistently, although progress hasn't exactly been quick (it's been over a decade already). GNU cut
doesn't even implement the -n
option yet, even though it is orthogonal and intended to help the transition. There are potential compatibility problems with old scripts, which may be a concern, although I don't know definitively what the reason is.
edited Oct 23 '14 at 6:28
answered Oct 23 '14 at 6:16
Michael HomerMichael Homer
50.2k8138176
50.2k8138176
1
good work. youll find the same kind of comments in GNU'str
docs as well. and eventar
unless i misremember. i guess its a big project.
– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm incut
? For example, where is it possible to download the sources for patchedcut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g.5-8,44-49
)
– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives tocut -c
here: superuser.com/questions/506164/…
– myrdd
Dec 12 '18 at 14:32
add a comment |
1
good work. youll find the same kind of comments in GNU'str
docs as well. and eventar
unless i misremember. i guess its a big project.
– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm incut
? For example, where is it possible to download the sources for patchedcut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g.5-8,44-49
)
– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives tocut -c
here: superuser.com/questions/506164/…
– myrdd
Dec 12 '18 at 14:32
1
1
good work. youll find the same kind of comments in GNU's
tr
docs as well. and even tar
unless i misremember. i guess its a big project.– mikeserv
Oct 23 '14 at 8:42
good work. youll find the same kind of comments in GNU's
tr
docs as well. and even tar
unless i misremember. i guess its a big project.– mikeserv
Oct 23 '14 at 8:42
Is there any workaround for unicode probelm in
cut
? For example, where is it possible to download the sources for patched cut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g. 5-8,44-49
)– dma_k
Jan 31 '18 at 0:11
Is there any workaround for unicode probelm in
cut
? For example, where is it possible to download the sources for patched cut
? Or would it be more easier to use another utility? (grep
solution below does not work smoothly with ranges e.g. 5-8,44-49
)– dma_k
Jan 31 '18 at 0:11
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
see this 2017 article, sub-titled ”Random notes and pointers regarding the on-going effort to add multibyte and unicode support in GNU Coreutils“: crashcourse.housegordon.org/coreutils-multibyte-support.html
– myrdd
Dec 12 '18 at 14:29
you can find some alternatives to
cut -c
here: superuser.com/questions/506164/…– myrdd
Dec 12 '18 at 14:32
you can find some alternatives to
cut -c
here: superuser.com/questions/506164/…– myrdd
Dec 12 '18 at 14:32
add a comment |
Since many grep
implementations are multibyte-aware, you can also use grep -o
to simulate some uses of cut -c
.
$ echo Τηεοδ29 | grep -o '^..'
Τη
$ echo Τηεοδ29 | egrep -o '^..' | grep -o '.$'
η
Adjust the number of periods to simulate cut
ranges.
add a comment |
Since many grep
implementations are multibyte-aware, you can also use grep -o
to simulate some uses of cut -c
.
$ echo Τηεοδ29 | grep -o '^..'
Τη
$ echo Τηεοδ29 | egrep -o '^..' | grep -o '.$'
η
Adjust the number of periods to simulate cut
ranges.
add a comment |
Since many grep
implementations are multibyte-aware, you can also use grep -o
to simulate some uses of cut -c
.
$ echo Τηεοδ29 | grep -o '^..'
Τη
$ echo Τηεοδ29 | egrep -o '^..' | grep -o '.$'
η
Adjust the number of periods to simulate cut
ranges.
Since many grep
implementations are multibyte-aware, you can also use grep -o
to simulate some uses of cut -c
.
$ echo Τηεοδ29 | grep -o '^..'
Τη
$ echo Τηεοδ29 | egrep -o '^..' | grep -o '.$'
η
Adjust the number of periods to simulate cut
ranges.
edited Aug 20 '16 at 14:57
answered Aug 20 '16 at 14:48
Royce WilliamsRoyce Williams
735618
735618
add a comment |
add a comment |
colrm
(part of util-linux
, should be already installed on most distributions) seems to handle internationalization much better :
$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α
Beware of the numbering : colrm N
will remove columns from N
, printing characters up to N-1
.
(credits)
add a comment |
colrm
(part of util-linux
, should be already installed on most distributions) seems to handle internationalization much better :
$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α
Beware of the numbering : colrm N
will remove columns from N
, printing characters up to N-1
.
(credits)
add a comment |
colrm
(part of util-linux
, should be already installed on most distributions) seems to handle internationalization much better :
$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α
Beware of the numbering : colrm N
will remove columns from N
, printing characters up to N-1
.
(credits)
colrm
(part of util-linux
, should be already installed on most distributions) seems to handle internationalization much better :
$ echo 'αβγ' | colrm 3
αβ
$ echo 'αβγ' | colrm 2
α
Beware of the numbering : colrm N
will remove columns from N
, printing characters up to N-1
.
(credits)
answered yesterday
Skippy le Grand GourouSkippy le Grand Gourou
1,1121122
1,1121122
add a comment |
add a comment |
Thanks for contributing an answer to Unix & Linux Stack Exchange!
- Please be sure to answer the question. Provide details and share your research!
But avoid …
- Asking for help, clarification, or responding to other answers.
- Making statements based on opinion; back them up with references or personal experience.
To learn more, see our tips on writing great answers.
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
StackExchange.ready(
function ()
StackExchange.openid.initPostLogin('.new-post-login', 'https%3a%2f%2funix.stackexchange.com%2fquestions%2f163721%2fcan-not-use-cut-c-characters-with-utf-8%23new-answer', 'question_page');
);
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Sign up or log in
StackExchange.ready(function ()
StackExchange.helpers.onClickDraftSave('#login-link');
);
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Sign up using Google
Sign up using Facebook
Sign up using Email and Password
Post as a guest
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Required, but never shown
Interesting! It looks like
-c
is using the same code as-b
. Did you have a look at the source code? Maybe you can find a hint what-c
is actually meant for.– michas
Oct 23 '14 at 6:11